在numba中@jit和@vectorize有什么区别?

时间:2017-11-29 19:47:19

标签: python numpy jit numba

我什么时候应该使用@vectorize?

我试过@jit并显示下面代码的一部分,

from numba import jit

@jit
def kma(g,temp): 
    k=np.exp(-(g+np.abs(g))/(2*temp))   
    return k

但我的代码没有加速算法。为什么呢?

1 个答案:

答案 0 :(得分:6)

@vectorize用于编写可以一次将一个元素(标量)应用于数组的表达式。 @jit装饰器更通用,可以用于任何类型的计算。

详细讨论了文档中的其他好处:

http://numba.pydata.org/numba-doc/latest/user/vectorize.html

  

你可能会问自己,“为什么我要经历这个而不是使用@jit装饰器编译一个简单的迭代循环?”。答案是NumPy ufuncs会自动获得其他功能,如缩小,累积或广播。

你的代码没有被加速的原因(我看到jitted和non-jitted代码之间几乎相同的性能)是你正在执行的操作已经由低级编译代码完全处理了numpy矢量化操作背后。

如果展开隐式循环以避免创建中间数组,可能会节省一些成本,但通常numba对于不容易在numpy中进行矢量化的操作非常擅长。