在python中绘制3D零均值,单位方差Gaussian会产生意想不到的结果

时间:2017-06-06 16:36:33

标签: python numpy matplotlib gaussian

我使用零均值和单位方差的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

当我绘制距离的直方图时,我期望看到半高斯,模式为零,但我不会。

任何人都可以看到错误,或解释结果吗?

1 个答案:

答案 0 :(得分:6)

距离中心的距离分布半高斯分布。例如,在二维中,分布是Rayleigh distributionRice distribution的一种特殊情况)。

在这里,您可以使用协方差矩阵为身份的简单情况快速解释您希望分布的内容。然后,3D中高斯的PDF看起来像K*exp(-x.dot(x)/2),其中K1/(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的函数:

plot

使用

生成直方图
hist(dist_from_center, bins=25, normed=True)