版权声明:本博客内容为学习过程中的一些记录,大部分转载内容已标明转载,部分内容如有因疏忽未注明请与我联系,转载原创内容请注明链接,谢谢! https://blog.csdn.net/xiaodongxiexie/article/details/79180158
有时候需要比较大的计算量,这个时候Python的效率就很让人捉急了,此时可以考虑使用numba
进行加速,效果提升明显~
(numba 安装貌似很是繁琐,建议安装Anaconda,里面自带安装好各种常用科学计算库)
from numba import jit
@jit
def t(count=1000):
total = 0
for i in range(int(count)):
total += i
return total
测试效果:
(关于__wrapped__
见我的博文: 解除装饰器作用(python3新增) )
In [17]: %timeit -n 1 t.__wrapped__()
1 loop, best of 3: 52.9 µs per loop
In [18]: %timeit -n 1 t()
The slowest run took 13.00 times longer than the fastest. This could mean that an intermediate result is being cached.
1 loop, best of 3: 395 ns per loop
可以看到使用jit
加速后,即使设置测试一次,实际上还是取了三次的最优值,如果取最坏值(因为最优值可能是缓存下来的),则耗时为395ns * 13
大概是5us
还是比不使用的52.9us
快上大概10倍,
增大计算量可以看到使用numba加速后的效果提升更加明显,
In [19]: %timeit -n 10 t.__wrapped__(1e6)
10 loops, best of 3: 76.2 ms per loop
In [20]: %timeit -n 1 t(1e6)
The slowest run took 8.00 times longer than the fastest. This could mean that an intermediate result is being cached.
1 loop, best of 3: 790 ns per loop
如果减少计算量,可以看到当降到明显小值时,使用加速后的效果(以最差计)与不加速效果差距不大,因此如果涉及到较大计算量不妨使用jit
加速下,何况使用起来这么简便。
%timeit -n 1 t(10)
1 loop, best of 3: 0 ns per loop
%timeit -n 100 t.__wrapped__(10)
100 loops, best of 3: 1.79 µs per loop
%timeit -n 1 t(1)
The slowest run took 17.00 times longer than the fastest. This could mean that an intermediate result is being cached.
1 loop, best of 3: 395 ns per loop
%timeit -n 100 t.__wrapped__(1)
100 loops, best of 3: 671 ns per loop