中心极限定理指的是给定一个任意分布的总体。我每次从这些总体中随机抽取 n 个抽样,一共抽 m 次。 然后把这 m 组抽样分别求出平均值。 这些平均值的分布接近正态分布。

例一

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties

# 设置字体,避免乱码
font_set = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=12)
plt.title('柱状图', fontproperties=font_set)

# 设置精度,只留一个小数位
np.set_printoptions(precision=0)

# 生成1-6的随机数
random_data = np.random.randint(1, 7, 1000000)

# 分n组,每组m个
samples = []
# 分组的平均值
samples_mean = []
# 分组的标准差
samples_std = []
for i in range(0, 1000):
sample = []
for j in range(0, 500):
sample.append(random_data[int(np.random.random() * len(random_data))])
sample_np = np.array(sample)
samples_mean.append(sample_np.mean())
samples_std.append(sample_np.std())
samples.append(sample_np)

# 转换下格式
samples_mean_np = np.array(samples_mean)
samples_std_np = np.array(samples_std)

# 画图
print(samples_mean_np)
plt.hist(samples_mean_np, bins=10)
plt.show()

效果图:

Python解释中心极限定理_随机数

例二

import numpy as np
from numpy import random as nprd

def sampling(N):
## 产生一组样本,以0.5的概率为z+3,0.5的概率为z-3,其中z~N(0,1)
d=nprd.rand(N)<0.5
z=nprd.randn(N)
x=np.array([z[i]+3 if d[i] else z[i]-3 for i in range(N)])
return x

N=[2,3,4,10,100,1000] # sample size
M=2000
MEANS=[]
for n in N:
mean_x=np.zeros(M)
for i in range(M):
x=sampling(n)
mean_x[i]=np.mean(x)/np.sqrt(10/n) ## 标准化,因为var(x)=10
MEANS.append(mean_x)

## 导入matplotlib
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
## 使图形直接插入到jupyter中
# %matplotlib inline
# 设定图像大小
plt.rcParams['figure.figsize'] = (10.0, 8.0)

x=sampling(1000)
plt.xlabel('x')
plt.ylabel('Density')
plt.title('Histogram of Mixed Normal')
plt.hist(x,bins=30,normed=1) ## histgram
plt.show() ## 画图

## 均值
ax1 = plt.subplot(2,3,1)
ax2 = plt.subplot(2,3,2)
ax3 = plt.subplot(2,3,3)
ax4 = plt.subplot(2,3,4)
ax5 = plt.subplot(2,3,5)
ax6 = plt.subplot(2,3,6)

## normal density
x=np.linspace(-3,3,100)
d=[1.0/np.sqrt(2*np.pi)*np.exp(-i**2/2) for i in x]

def plot_density(ax,data,N):
ax.hist(data,bins=30,normed=1) ## histgram
ax.plot(x,d)
ax.set_title(r'Histogram of $\bar{x}$:N=%d' % N)

plot_density(ax1,MEANS[0],N[0])
plot_density(ax2,MEANS[1],N[1])
plot_density(ax3,MEANS[2],N[2])
plot_density(ax4,MEANS[3],N[3])
plot_density(ax5,MEANS[4],N[4])
plot_density(ax6,MEANS[5],N[5])

plt.show() ## 画图

Python解释中心极限定理_直接插入_02


Python解释中心极限定理_直接插入_03


参考:​​https://zhuanlan.zhihu.com/p/25241653​