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

Dav*_*rks 4 python numpy gaussian matplotlib

我正在使用具有零均值和单位方差的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
Run Code Online (Sandbox Code Playgroud)

我可以绘制每个维度并看到高斯人.

我无法绘制完整的3D高斯,因此要验证我计算了每个样本data_values距离原点的距离(0,0,0).

dist_from_center = np.sqrt(np.sum((data_values)**2, axis=1))      # array of 5000
Run Code Online (Sandbox Code Playgroud)

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

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

War*_*ser 6

距离中心的距离分布不是半高斯分布.例如,在二维中,分布是瑞利分布(Rice分布的特例).

下面是使用协方差矩阵为标识的简单情况,快速解释您应该期望分布的内容.然后高斯在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分布.)

这是一个距离直方图的图表,以及以下函数的函数r:

情节

直方图是使用生成的

hist(dist_from_center, bins=25, normed=True)
Run Code Online (Sandbox Code Playgroud)