✨博文作者 wangzirui32
喜欢的可以 点赞 收藏 关注哦~~
我的第156篇原创作品
本文首发于CSDN,未经许可禁止转载
hello,大家好,我是wangzirui32,今天我们来学习如何使用Numba优化Python性能,开始学习吧!
Numba是Python的即时编译器,当你调用函数时,函数代码将转换为机器码,以你的本机机器码速度运行,可以大大提高代码的运行速度。
Numba只需要使用pip
命令安装,如下:
pip install numba
安装无报错即成功。
我们举一个求解1000里有多少个质数的例子,代码如下:
import time
def is_prime(n):
for i in range(2, n):
if n % i == 0:
return False
return True
def prime_in(n):
primes = []
for i in range(2, n+1):
if is_prime(i):
primes.append(i)
return primes
start = time.time()
print(len(prime_in(1000)))
end = time.time()
print("程序运行时间:{}".format(end-start))
运行结果:
168
程序运行时间:0.016394853591918945
如果求100000里有多少个质数呢?(prime_in(1000)
改为prime_in(100000)
)
9592
程序运行时间:23.66012716293335
运行时间明显大幅度上升,如何优化性能呢?
对代码进行修改:
import time
from numba import jit # 导入jit装饰器
@jit(nopython=True)
def is_prime(n):
for i in range(2, n):
if n % i == 0:
return False
return True
@jit(nopython=True)
def prime_in(n):
primes = []
for i in range(2, n+1):
if is_prime(i):
primes.append(i)
return primes
start = time.time()
print(len(prime_in(100000)))
end = time.time()
print("程序运行时间:{}".format(end-start))
结果截然不同:
9592
程序运行时间:3.5163464546203613
jit
装饰器是用来做什么的呢?
jit
的全称是Just-In-Time
,用此装饰器“装饰”的函数都可以获得循环处理等的性能优化,还对Numpy
做了支持。
为了获得最佳的性能,建议jit
装饰器中使用参数nopython=True
,但其实它根本不使用Python解释器,@jit(nopython=True)
也可以写为@njit
(需要导入nijt
)。
Github:https://github.com/numba/numba
官方文档:https://numba.readthedocs.io/en/stable/
好了,今天的课程就到这里,我是wangzirui32,喜欢的可以点个收藏和关注,我们下次再见!