为什么我的高斯 np.array 不对称?
Why is my gaussian np.array not symmetric?
我正在尝试编写一个 returns 大小为 nx
x ny
的 np.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. ]]
...这不是对称的。对于更大的 nx
和 ny
,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))
我正在尝试编写一个 returns 大小为 nx
x ny
的 np.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. ]]
...这不是对称的。对于更大的 nx
和 ny
,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))