gpt4 book ai didi

python - 二维高斯函数不产生正确的结果

转载 作者:太空宇宙 更新时间:2023-11-04 00:01:58 26 4
gpt4 key购买 nike

我想编写一个函数,返回一个大小为 nx x nynp.array,它包含一个中心高斯分布,均值mu 和 sd sig。下面的代码在某些情况下有效,但在很多情况下无效 - 哪里出了问题,或者我还应该写什么来获得我需要的东西?

import matplotlib.pyplot as plt
import numpy as np

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

# just for debugging:
np.set_printoptions(precision=1, suppress=True)
print(g.shape)
print(g)
plt.imshow(g, cmap='jet', interpolation='nearest')
plt.colorbar()
plt.show()

return g

下面是一些带有注释的测试用例:

from create2dGaussian import create2dGaussian

create2dGaussian(1, 10, 25, 25) # seems to work
create2dGaussian(1, 5, 25, 25) # the middle is not quite the peak anymore
create2dGaussian(1, 1, 25, 25) # the above problem more clearly visible
create2dGaussian(1, 1, 5, 5) # here it is extrem as the middle is now only 0.6

create2dGaussian(5, 10, 25, 25) # mean is still 1 and not 5

最佳答案

您的建议中存在对均值的混淆。在一维情况下,说它居中就是说它的均值是 0。对于 2D 高斯,可以说有两种方法,定义为 xy 的期望值。再次说它居中就是说它们都是 0

总结一下,你的密度不是中心二维高斯的密度,应该是

exp(-((x**2 +y**2) / (2.0 * sigma ** 2)))

如果高斯以 (xm, ym) 为中心,则密度为

exp(-(((x-xm)**2 +(y-ym)**2) / (2.0 * sigma ** 2)))

但是不存在平均 mu 的居中高斯分布。

关于python - 二维高斯函数不产生正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55430086/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com