使用python模拟高斯分布例子
正态分布(Normaldistribution),也称“常态分布”,又名高斯分布(Gaussiandistribution)
正态曲线呈钟型,两头低,中间高,左右对称因其曲线呈钟形,因此人们又经常称之为钟形曲线。
若随机变量X服从一个数学期望为μ、方差为σ^2的正态分布。其概率密度函数为正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。当μ=0,σ=1时的正态分布是标准正态分布。
用python模拟
#!/usr/bin/python
#-*-coding:utf-8-*-
importnumpyasnp
fromscipyimportstats
importmath
importmatplotlibasmpl
importmatplotlib.pyplotasplt
frommpl_toolkits.mplot3dimportAxes3D
frommatplotlibimportcm
importseaborn
defcalc_statistics(x):
n=x.shape[0]#样本个数
#手动计算
m=0
m2=0
m3=0
m4=0
fortinx:
m+=t
m2+=t*t
m3+=t**3
m4+=t**4
m/=n
m2/=n
m3/=n
m4/=n
mu=m
sigma=np.sqrt(m2-mu*mu)
skew=(m3-3*mu*m2+2*mu**3)/sigma**3
kurtosis=(m4-4*mu*m3+6*mu*mu*m2-4*mu**3*mu+mu**4)/sigma**4-3
print('手动计算均值、标准差、偏度、峰度:',mu,sigma,skew,kurtosis)
#使用系统函数验证
mu=np.mean(x,axis=0)
sigma=np.std(x,axis=0)
skew=stats.skew(x)
kurtosis=stats.kurtosis(x)
returnmu,sigma,skew,kurtosis
if__name__=='__main__':
d=np.random.randn(10000)
print(d)
print(d.shape)
mu,sigma,skew,kurtosis=calc_statistics(d)
print('函数库计算均值、标准差、偏度、峰度:',mu,sigma,skew,kurtosis)
#一维直方图
mpl.rcParams['font.sans-serif']='SimHei'
mpl.rcParams['axes.unicode_minus']=False
plt.figure(num=1,facecolor='w')
y1,x1,dummy=plt.hist(d,bins=30,normed=True,color='g',alpha=0.75,edgecolor='k',lw=0.5)
t=np.arange(x1.min(),x1.max(),0.05)
y=np.exp(-t**2/2)/math.sqrt(2*math.pi)
plt.plot(t,y,'r-',lw=2)
plt.title('高斯分布,样本个数:%d'%d.shape[0])
plt.grid(b=True,ls=':',color='#404040')
#plt.show()
d=np.random.randn(100000,2)
mu,sigma,skew,kurtosis=calc_statistics(d)
print('函数库计算均值、标准差、偏度、峰度:',mu,sigma,skew,kurtosis)
#二维图像
N=30
density,edges=np.histogramdd(d,bins=[N,N])
print('样本总数:',np.sum(density))
density/=density.max()
x=y=np.arange(N)
print('x=',x)
print('y=',y)
t=np.meshgrid(x,y)
print(t)
fig=plt.figure(facecolor='w')
ax=fig.add_subplot(111,projection='3d')
#ax.scatter(t[0],t[1],density,c='r',s=50*density,marker='o',depthshade=True,edgecolor='k')
ax.plot_surface(t[0],t[1],density,cmap=cm.Accent,rstride=1,cstride=1,alpha=0.9,lw=0.75,edgecolor='k')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.title('二元高斯分布,样本个数:%d'%d.shape[0],fontsize=15)
plt.tight_layout(0.1)
plt.show()
来个6的
二元高斯分布方差比较
#!/usr/bin/python
#-*-coding:utf-8-*-
importnumpyasnp
fromscipyimportstats
importmatplotlibasmpl
importmatplotlib.pyplotasplt
frommpl_toolkits.mplot3dimportAxes3D
frommatplotlibimportcm
if__name__=='__main__':
x1,x2=np.mgrid[-5:5:51j,-5:5:51j]
x=np.stack((x1,x2),axis=2)
print('x1=\n',x1)
print('x2=\n',x2)
print('x=\n',x)
mpl.rcParams['axes.unicode_minus']=False
mpl.rcParams['font.sans-serif']='SimHei'
plt.figure(figsize=(9,8),facecolor='w')
sigma=(np.identity(2),np.diag((3,3)),np.diag((2,5)),np.array(((2,1),(1,5))))
foriinnp.arange(4):
ax=plt.subplot(2,2,i+1,projection='3d')
norm=stats.multivariate_normal((0,0),sigma[i])
y=norm.pdf(x)
ax.plot_surface(x1,x2,y,cmap=cm.Accent,rstride=1,cstride=1,alpha=0.9,lw=0.3,edgecolor='#303030')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.suptitle('二元高斯分布方差比较',fontsize=18)
plt.tight_layout(1.5)
plt.show()
图像好看吗?
以上这篇使用python模拟高斯分布例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。