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

时间:2019-03-29 14:48:17

标签: python numpy gaussian

我正在尝试编写一个返回大小为np.array x nx的{​​{1}}且包含均值ny和sd {{1}的中心高斯分布的函数}。它在原理上像下面这样工作,但是问题是结果不是完全对称的。对于较大的mu x sig来说,这不是问题,但是对于较小的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图看起来很好/平滑,但是为什么详细的数字不正确,我该如何解决?

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

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

虽然以下描述的解决方案可解决标题(非对称分布)中提到的问题,但此代码还包含其他一些here讨论的问题。

1 个答案:

答案 0 :(得分:2)

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))