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

标签 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

当我绘制距离直方图时,我希望看到半个高斯分布,模式为零,但我没有。

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

最佳答案

距中心的距离分布不是半高斯分布。例如,在二维中,分布是 Rayleigh distribution (Rice distribution 的特例)。

这是对您应该期望的分布的快速解释,使用协方差矩阵是恒等式的简单情况。然后 3D 中高斯的 PDF 看起来像 K*exp(-x.dot(x)/2),其中 K1/(2* pi)**(1.5)。将x.dot(x)改写为r**2r 是到原点的距离。所以 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)

关于python - 在 python 中绘制 3D 零均值、单位方差高斯会产生意想不到的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44395422/

相关文章:

python - Emacs:Python 的完整基类方法

python - 如何将原始数据与集群数据关联起来

python - 随着时间的推移可视化多个虚拟变量

python - 如何使用 pandas/matplotlib 绘制/管理 2 列分类数据?

python - 使用 python 和 matplotlib 获取箱线图中使用的值

python - 从 float 列表中,如何在 Python 中只保留尾数?

python - 如何从多维张量中提取值而不丢失后向信息 - PyTorch

python - 如何删除使用 tempfile.mkdtemp 创建的目录?

python - 如何删除pandas ta列下的多行?

python - np.unravel_index 的直观解释是什么?