Python3:矢量化 2D 函数作为 2D 数组的输出



我有一个简单的函数:

def F(rx,ry):
return rx**2+ry**2

然后我必须通过运行这个嵌套循环来填充数组:

for i in range(xarr.size):
for j in range(yarr.size):
rx=xarr[i]
ry=yarr[j]

array_2d[i,j] = F(rx,ry)

是否可以对此进行矢量化?我的想法是获得这样的东西:

array_2d[:,:] = F(xarr[:],yarr[:])

我看到了这个:

vectfunc = np.vectorize(F,otypes=[np.float],cache=False)

这可以给我一个一维数组,例如:

vectfunc(xarr,1)->1D array 

但我看不出这对我有什么帮助。

幸运的是,您要执行的操作已经在numpy中进行了矢量化。

因此,如果您的输入数组是 numpy 数组,您可以创建一个基本上执行此操作的函数(没有 %timeit(。 这显示了您在 2 个长度为 1M 的 numpy 数组上的操作:

In [29]: import numpy as np                                                     
In [30]: arr1 = np.random.rand(1_000_000)                                       
In [31]: arr2 = np.random.rand(1_000_000)                                       
In [32]: %timeit result = arr1*arr1 + arr2*arr2                                 
3.54 ms ± 25.8 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [33]: 

最新更新