2018/10/02
转载:http://www.cnblogs.com/vamei/p/3460965.html
注意看这个大数定律的具体应用,这个才是真正有用的内容。
我看了书本上的一些内容和这个外网的一些内容,好像对应用这一块都不是特别准确。这就很尴尬。)
先简单介绍一下大数定律的具体内容:
选取n个独立同分布的随机变量,这个n趋近于无穷的时候,均值将趋近于一个正态分布。
(不过,我的这个初步的版本感觉理解的不是很透彻,虽然图已经很接近了。)
初步版本代码:
1 #! /usr/bin/python
2 #coding:utf-8
3 #2018/10/02
4 #Author:VChao
5
6 import os
7 import matplotlib
8 matplotlib.use('Agg')
9
10 import matplotlib.pyplot as plt
11 from numpy import random
12
13 def get_one_mean(num = 10000):
14 #Get One mean from the exponential distribution of (nums) data
15 return random.exponential(size = num).mean()
16
17
18 def main():
19 mean_array = []
20 for i in range(1000):
21 mean_array.append(get_one_mean(1000))
22 plt.hist(mean_array,100)
23 plt.savefig("clt.png")
24
25
26 if __name__ == "__main__":
27 main()
当我调整随机变量的个数(为生成均值的参数)的时候,就会发生相应的变化。
下面是相应的图片。
但是,我有一点不明白的地方就是,到底这个n指代的是什么。因为我看了修改函数的参数也好,修改外面循环的次数也好,都可以产生相同的内容。主要是因为这部分的他的代码和我的不一样。
不过我看了一下,他的那个地方呢用的是rvs的这个api,我看了看这个代码,他是说返回了几个变量,也许就是这个地方就能解释了。
下面将代码改成跟网页中一样的风格。
最后的图片效果是这样的。
14 def get_one_mean(num = 10000):
15 #Get One mean from the exponential distribution of (nums) data
16 return random.exponential(size = num).mean()
17
18
19 def main():
20 '''
21 Old Version:
22 mean_array = []
23 for i in range(1000):
24 mean_array.append(get_one_mean(1000))
25 plt.hist(mean_array,100)
26 plt.savefig("clt.png")
27 os.system("sz clt.png")
28 '''
29 plt.figure(figsize = (12,4))
30 for N,subp in zip([1,20,1000],[131,132,133]):
31 all_means = np.array([get_one_mean(N) for i in range(10000)])
32
33 plt.subplot(subp)
34 plt.hist(all_means , bins = 100,color = "blue")
35 plt.title("Central Limit Theory n = %i" %N)
36 plt.xlabel("sample means")
37 plt.ylabel("Frequency")
38 plt.tight_layout()
39 plt.savefig("clt.png",facecolor="w")
40 os.system("sz clt.png")
上面这个代码主要在于这个循环的设计,如果是我的话就要写两个循环了。