Numba基本示例比纯python慢

时间:2017-02-10 17:06:11

标签: python optimization numba

我正在尝试使用基本示例来比较numba和纯python,我得到了奇怪的结果。

这是numba的例子:

from numba import jit
from numpy import arange
from time import time
# jit decorator tells Numba to compile this function.
# The argument types will be inferred by Numba when function is called.
@jit
def sum2d(arr):
    M, N = arr.shape
    result = 0.0
    for i in range(M):
        for j in range(N):
            result += arr[i,j]
    return result

a = arange(9).reshape(3,3)
t = time()
print(sum2d(a))
print time() - t

这是我用numba获得的时间0.0469660758972秒

没有numba我得到了更快的结果9.60826873779e-05秒

1 个答案:

答案 0 :(得分:3)

需要根据参数的类型编译你的函数,你可以通过提供签名(eager compilation)来定义函数时这样做,或者你可以让numba推断出类型的类型当你第一次调用这个函数时(它毕竟被称为实时[JIT]编译: - ))。

您尚未指定任何签名,因此在您第一次调用该函数时它将推断并编译该函数。您使用的示例中为even state that

# jit decorator tells Numba to compile this function.
# The argument types will be inferred by Numba when function is called.

然而,后续运行(具有相同的类型和dtypes)将很快:

t = time()
print(sum2d(a))    # 0.035051584243774414
print(time() - t)

%timeit sum2d(a)   # 1000000 loops, best of 3: 1.57 µs per loop

最后一个命令使用IPythons %timeit command