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

Evaluate the probability density of Gaussian distribution on a square grid

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

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

也许利用一些数学性质,这可以转化为我想要的,但我看不到它,因为我数学不太好。

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 之间的每个点的高度。

您可以将此 window 应用到您想要的任何图像,只需执行 image * pdf

编辑:

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