我对使用numba
获得的HERE加速效果印象深刻
今天我在soa question里找到了一个想加速他的代码的人。所以我想让我们看看用numba
可以实现什么。在
代码如下:
from numba import autojit
from time import time
LIMIT = pow(10,6)
def primes(limit):
# Keep only odd numbers in sieve, mapping from index to number is
# num = 2 * idx + 3
# The square of the number corresponding to idx then corresponds to:
# idx2 = 2*idx*idx + 6*idx + 3
sieve = [True] * (limit // 2)
prime_numbers = set([2])
for j in range(len(sieve)):
if sieve[j]:
new_prime = 2*j + 3
prime_numbers.add(new_prime)
for k in range((2*j+6)*j+3, len(sieve), new_prime):
sieve[k] = False
return list(prime_numbers)
numba_primes = autojit(primes)
start = time()
numba_primes(LIMIT)
end=time()
print("Numba: Time Taken : ",end-start)
start = time()
primes(LIMIT)
end=time()
print("Python: Time Taken : ",end-start)
结果是:
^{pr2}$为什么会这样?似乎有了numba
这段代码并没有变得更快!在
这是您的代码的一个麻木版本(使用numba0.13),这是通过使用numpy数组优化的
然后与时间进行比较:
^{pr2}$这是20倍的加速,尽管可能还有进一步的优化。如果没有jit decorator,numba版本在我的机器上运行大约300毫秒。对
primes_util
的实际调用只需大约5毫秒,其余的是对np.nonzero
的调用和对列表的转换。在相关问题 更多 >
编程相关推荐