我什么时候应该使用@vectorize?
我试过@jit并显示下面代码的一部分,
from numba import jit
@jit
def kma(g,temp):
k=np.exp(-(g+np.abs(g))/(2*temp))
return k
但我的代码没有加速算法。为什么呢?
答案 0 :(得分:6)
@vectorize
用于编写可以一次将一个元素(标量)应用于数组的表达式。 @jit
装饰器更通用,可以用于任何类型的计算。
详细讨论了文档中的其他好处:
http://numba.pydata.org/numba-doc/latest/user/vectorize.html
你可能会问自己,“为什么我要经历这个而不是使用@jit装饰器编译一个简单的迭代循环?”。答案是NumPy ufuncs会自动获得其他功能,如缩小,累积或广播。
你的代码没有被加速的原因(我看到jitted和non-jitted代码之间几乎相同的性能)是你正在执行的操作已经由低级编译代码完全处理了numpy矢量化操作背后。
如果展开隐式循环以避免创建中间数组,可能会节省一些成本,但通常numba对于不容易在numpy中进行矢量化的操作非常擅长。