给定一个NumPy数组A,将相同的函数f应用于每个单元的最快/最有效的方法是什么?
假设我们将f(A(i,j) )赋值给A(i,j)。
“显而易见”的双循环迭代(通过每个单元)是最优解决方案吗?
发布于 2011-10-09 13:06:11
你可以简单地vectorize这个函数,然后在每次你需要它的时候将它直接应用于一个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])
发布于 2011-10-10 08:02:53
一个类似的问题是:Mapping a NumPy array in place。如果可以找到f()的输出,那么应该使用ufunc参数。
发布于 2016-05-10 19:59:18
如果您正在处理数字和f(A(i,j)) = f(A(j,i))
,则可以使用scipy.spatial.distance.cdist将f定义为A(i)
和A(j)
之间的距离。
https://stackoverflow.com/questions/7701429
复制相似问题