我使用零均值和单位方差的numpy绘制一组3D高斯样本:
cov = np.zeros((3,3), dtype=np.float32)
np.fill_diagonal(cov, 1.0)
data_values = np.random.multivariate_normal([0.,0.,0.], cov, size=5000) # 5000 x 3
我可以绘制每个维度并看到高斯人。
我无法绘制完整的3D高斯,因此要验证我计算data_values
中每个样本距原点(0,0,0)
的距离。
dist_from_center = np.sqrt(np.sum((data_values)**2, axis=1)) # array of 5000
当我绘制距离的直方图时,我期望看到半高斯,模式为零,但我不会。
任何人都可以看到错误,或解释结果吗?
答案 0 :(得分:6)
距离中心的距离分布不半高斯分布。例如,在二维中,分布是Rayleigh distribution(Rice distribution的一种特殊情况)。
在这里,您可以使用协方差矩阵为身份的简单情况快速解释您希望分布的内容。然后,3D中高斯的PDF看起来像K*exp(-x.dot(x)/2)
,其中K
是1/(2*pi)**(1.5)
。将x.dot(x)
重写为r**2
; r
是与原点的距离。因此PDF的行为类似于K*exp(-r**2/2)
。
现在想象一下原点周围的一个薄球壳,半径为r
,无穷小的厚度为dr
。 "卷"这个薄壳的大约是4*pi*r**2*dr
。整个体积必须包含在距离原点的距离分布中。因此,我们将高斯PDF(表示为r
的函数)乘以该球壳的体积,并除以dr
以得到密度作为r
的函数。这给出了(2*r**2)/sqrt(2*pi)*exp(-r**2/2)
。 (此分布称为Maxwell-Boltzmann distribution。)
这里是距离直方图的图表,以及r
的函数:
使用
生成直方图hist(dist_from_center, bins=25, normed=True)