首页 > 解决方案 > Python3:将二维函数向量化为二维数组的输出

问题描述

我有一个简单的功能:

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 

但我不明白这对我有什么帮助。

标签: python-3.xvectorization

解决方案


幸运的是,您想要执行的操作已经在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]: 

推荐阅读