一. 前言:numba,让python速度提升百倍
python由于它动态解释性语言的特性,跑起代码来相比java、c++要慢很多,尤其在做科学计算的时候,十亿百亿级别的运算,让python的这种劣势更加凸显。
办法永远比困难多,numba就是解决python慢的一大利器,可以让python的运行速度提升上百倍!
二. 什么是numba?
numba是一款可以将python函数编译为机器代码的JIT编译器,经过numba编译的python代码(仅限数组运算),其运行速度可以接近C或FORTRAN语言。
python之所以慢,是因为它是靠CPython编译的,numba的作用是给python换一种编译器。
三. numba使用方法
from numba import jit
import numpy as np
import time
x = np.arange(100).reshape(10, 10)
@jit(nopython=True)
def go_fast(a): # Function is compiled and runs in machine code
trace = 0.0
for i in range(a.shape[0]):
trace += np.tanh(a[i, i])
return a + trace
# DO NOT REPORT THIS... COMPILATION TIME IS INCLUDED IN THE EXECUTION TIME!
start = time.perf_counter()
go_fast(x)
end = time.perf_counter()
print("Elapsed (with compilation) = {}s".format((end - start)))
# NOW THE FUNCTION IS COMPILED, RE-TIME IT EXECUTING FROM CACHE
start = time.perf_counter()
go_fast(x)
end = time.perf_counter()
print("Elapsed (after compilation) = {}s".format((end - start)))
Elapsed (with compilation) = 3.3010261569870636s
Elapsed (after compilation) = 5.221023457124829e-06s
可以看到numba让python飞起来了!
用法:导入numba模块,再要进行加速的函数前加上@jit(nopython=True)这个装饰器。
四. 结论
numba对python代码运行速度有巨大的提升,这极大的促进了大数据时代的python数据分析能力,对数据科学工作者来说,这真是一个lucky tool !
当然numba不会对numpy和for循环以外的python代码有很大帮助,你不要指望numba可以帮你加快从数据库取数,这点它真的做不到哈。
参考:https://numba.readthedocs.io/en/stable/user/5minguide.html