在NumPy数组的每个单元格上对函数进行有效的评估

给定一个NumPy数组A ,对每个单元应用相同函数f的最快/最有效的方法是什么?

  1. 假设我们将赋予A(i,j) f(A(i,j))

  2. 函数f没有二进制输出,因此mask(ing)操作将不起作用。

是“明显的”双循环迭代(通过每个细胞)的最佳解决scheme?

你可以vector化这个函数,然后在你每次需要的时候直接把它应用到一个Numpy数组中:

import numpy as np def f(x): return x * x + 3 * x - 2 if x > 0 else x * 5 + 8 f = np.vectorize(f) # or use a different name if you want to keep the original f result_array = f(A) # if A is your Numpy array 

在向量化时直接指定显式输出types可能会更好:

 f = np.vectorize(f, otypes=[np.float]) 

类似的问题是: 映射一个NumPy数组 。 如果你可以为你的f()find一个ufunc ,那么你应该使用out参数。

如果你正在使用数字和f(A(i,j)) = f(A(j,i)) ,你可以使用scipy.spatial.distance.cdist来定义f作为A(i)A(j)