python
一直被病垢运行速度太慢,但是实际上python
的执行效率并不慢,慢的是python
用的解释器Cpython
运行效率太差。
“一行代码让python
的运行速度提高100倍”这绝不是哗众取宠的论调。
我们来看一下这个最简单的例子,从1一直累加到1亿。
最原始的代码:
import time
def foo(x,y):
tt = time.time()
s = 0
for i in range(x,y):
s += i
print('Time used: {} sec'.format(time.time()-tt))
return s
print(foo(1,100000000))
结果:
Time used: 6.779874801635742 sec
4999999950000000
我们来加一行代码,再看看结果:
from numba import jit
import time
@jit
def foo(x,y):
tt = time.time()
s = 0
for i in range(x,y):
s += i
print('Time used: {} sec'.format(time.time()-tt))
return s
print(foo(1,100000000))
结果:
Time used: 0.04680037498474121 sec
4999999950000000
是不是快了100多倍呢?
那么下面就分享一下“为啥numba
库的jit
模块那么牛掰?”
NumPy
的创始人Travis Oliphant
在离开Enthought
之后,创建了CONTINUUM
,致力于将Python
大数据处理方面的应用。最近推出的Numba
项目能够将处理NumPy
数组的Python
函数JIT
编译为机器码执行,从而上百倍的提高程序的运算速度。
Numba
项目的主页上有Linux
下的详细安装步骤。编译LLVM
需要花一些时间。Windows
用户可以从Unofficial Windows Binaries for Python Extension Packages
下载安装LLVMPy、meta
和numba
等几个扩展库。
下面我们看一个例子:
import numba as nb
from numba import jit
@jit('f8(f8[:])')
def sum1d(array):
s = 0.0
n = array.shape[0]
for i in range(n):
s += array[i]
return s
import numpy as np
array = np.random.random(