我有一个简单的函数:
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]: