我正在使用具有零均值和单位方差的 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
当我绘制距离直方图时,我希望看到半个高斯分布,模式为零,但我没有。
任何人都可以看到错误或解释结果吗?
最佳答案
距中心的距离分布不是半高斯分布。例如,在二维中,分布是 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)
关于python - 在 python 中绘制 3D 零均值、单位方差高斯会产生意想不到的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44395422/