我正在尝试编写一个返回大小为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. ]]
...这不是对称的。对于更大的nx
和ny
,一个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讨论的问题。
答案 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))