为什么我的高斯 np.array 不对称?

Why is my gaussian np.array not symmetric?

我正在尝试编写一个 returns 大小为 nx x nynp.array 函数,它包含一个中心高斯分布,均值 mu和 sd sig。它的工作原理如下所示,但问题是结果并不完全对称。对于较大的 nx x ny 这不是问题,但对于较小的 nx x ny

对于:

create2dGaussian (1, 1, 5, 5)

它输出:

[[ 0.   0.2  0.3  0.1  0. ]
 [ 0.2  0.9  1.   0.5  0. ]
 [ 0.3  1.   1.   0.6  0. ]
 [ 0.1  0.5  0.6  0.2  0. ]
 [ 0.   0.   0.   0.   0. ]]

...这不是对称的。对于更大的 nxny,3d 图看起来很完美 fine/smooth 但为什么详细的数字不正确,我该如何解决?

import numpy as np


def create2dGaussian (mu, sigma, nx, ny):
    x, y = np.meshgrid(np.linspace(-nx/2, +nx/2+1,nx), np.linspace(-ny/2, +ny/2+1,ny))
    d = np.sqrt(x*x+y*y)
    g = np.exp(-((d-mu)**2 / ( 2.0 * sigma**2 )))


    np.set_printoptions(precision=1, suppress=True)
    print(g.shape)
    print(g)
    return g

----- 编辑 -----

虽然下面描述的解决方案适用于标题中提到的问题(non-symmetric 分布),但此代码还有一些其他问题已讨论

Numpy 的 linspace 默认包含两条边,与 range 不同,您不需要在右侧添加一条边。为了安全起见,我还建议只除以浮点数:

x, y = np.meshgrid(np.linspace(-nx/2.0, +nx/2.0,nx), np.linspace(-ny/2.0, +ny/2.0,ny))