我试图通过将它们放入2D gausian的等式中来制作来自两个1D阵列的2D 5850x5850阵列。
psf = 1/(2*np.pi*sigma_x*sigma_y) * np.exp(-(x**2/(2*sigma_x**2) + y**2/(2*sigma_y**2)))
然而它回馈了一维阵列,我做错了吗?
答案 0 :(得分:0)
它不明白x和y意味着对于每个x,你必须为每个y执行此操作。如果找不到更方便地创建2d函数/ guassians的库,请尝试:
z = np.empty((len(x), len(y))
for idx, yval in enumerate(y):
z[:,idx] = f(x, yval)
f(x, yval)
如果你有2个功能,但你有y
,请使用yval
。必须有更多支持2d功能创建的地方,也许在搜索中尝试scipy 2d guassian函数?
答案 1 :(得分:0)
制作2d高斯的正确表达式将是
x = np.arange(0, size, 1, float)
y = x[:,np.newaxis]
x0 = y0 = 0 # your center
np.exp(-4*np.log(2) * ((x-x0)**2 + (y-y0)**2) / radius**2)
答案 2 :(得分:0)
如果我理解你的问题: 您需要做的就是改变阵列的形状。 例如。
x.shape=(5850,1) # now it is column array
y.shape=(1,5850) # now it is row array
然后您可以像原始帖子一样继续。结果将是5850乘5850阵列。每行对应不同的x,每列对应不同的y。
但是,我会在代码中更改一些内容,使其看起来像这样:
psf = 1/(2*np.pi*sigma_x*sigma_y) * np.exp(-(x*x/(2*sigma_x*sigma_x) + y*y/(2*sigma_y*sigma_y)))
平方值通常是低效的(除非你的编译器将其转换为乘法,但在Python中没有依赖的编译器)。平方比乘法慢得多。当你为计算机需要准备的功率取值时,它可能是负数或者它不是整数。当你乘以值时没有这样的开销。
尝试:
for i in xrange(0,1000000):
z=i**2
for i in xrange(0,1000000):
z=i*i
Formar在我的机器上运行了0.975秒,而后来只有0.267秒。