来自2个1d数组的2d函数的2d数组(Python)

时间:2015-02-02 19:25:08

标签: python numpy

我试图通过将它们放入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)))

然而它回馈了一维阵列,我做错了吗?

3 个答案:

答案 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秒。