评估方形网格上高斯分布的概率密度

时间:2017-12-06 21:03:48

标签: python arrays numpy numpy-random

我需要使用NumPy生成尺寸为m×n的图像蒙版,对应于二维高斯,中心位于μ=(i,j),σ^ 2 = 25。

在网上搜索后,我发现this documentation看起来很有希望。但是,有一些问题:

  • 生成的矩阵不是掩码(二进制)
  • 协方差(σ^ 2)作为矩阵给出而不是整数

也许使用一些数学属性,这可以转化为我想要的,但我看不到它,因为我不擅长数学。

1 个答案:

答案 0 :(得分:2)

numpy.random.multivariate_normal将为您提供从多元高斯分布中绘制的样本,其均值为0且方差为1.您想计算概率密度函数(PDF)对于这种分布,不要从中提取样本。

最简单的方法是使用scipy.stats.multivariate_normal.pdf函数,如下所示:

m, n = 100, 100
lims = (-3, 3) # support of the PDF
xx, yy = np.meshgrid(np.linspace(*lims, m), np.linspace(*lims, n))
points = np.stack((xx, yy), axis=-1)
mean = (1, 2) # Whatever your (i, j) is
covariance = 25.0
pdf = scipy.stats.multivariate_normal.pdf(points, mean, covariance)

pdf现在给出了x轴和y轴上-3和3之间平面中每个点的高斯函数的高度。

只需执行image * pdf

,即可将此窗口应用于您想要的任何图像

编辑:

感谢CrazyIvan指出pdf函数直接获取点网格。另请注意,np.linspace(*lims, m)使用特定于Python3的元组解包。如果您使用的是旧版本,请执行np.linspace(lims[0], lims[1], m)