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

kin*_*hen 7 python jit numpy numba

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

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

from numba import jit

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

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

Jos*_*del 6

@vectorize用于编写可以一次将一个元素(标量)应用于数组的表达式.该@jit装饰是更一般的,可以在任何类型的计算工作.

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

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

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

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

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