在NumPy数组的每个单元格上对函数进行有效的评估
给定一个NumPy数组A ,对每个单元应用相同函数f的最快/最有效的方法是什么?
-
假设我们将赋予A(i,j) f(A(i,j)) 。
-
函数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)
。