在每个NumPy数组单元格中高效评估函数
给定一个NumPy数组A
,有没有什么快速又高效的方法可以对每一个单元格应用相同的函数f()
?
我通过f(A(i,j))
来给A(i,j)
赋值。函数f()
没有二进制输出,所以用掩码操作是没用的。那是不是通过双重循环遍历每个单元格是最优的解决方案呢?
6 个回答
1
如果你在处理数字,并且有一个条件是 f(A(i,j)) = f(A(j,i))
,那么你可以使用 scipy.spatial.distance.cdist 这个工具,把 f 定义为 A(i)
和 A(j)
之间的距离。
6
有一个类似的问题是:在原地映射一个NumPy数组。如果你能找到一个适合你函数f()的ufunc,那么你应该使用out参数。
164
你可以直接把这个函数“向量化”,然后每次需要的时候就可以直接应用到一个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
在进行向量化的时候,最好直接指定一个明确的输出类型:
f = np.vectorize(f, otypes=[np.float])