您现在的位置是:首页 >技术交流 >Python加速网站首页技术交流
Python加速
一、Numba库&jit装饰器
numba是一款可以将python函数编译为机器代码的JIT编译器,经过numba编译的python代码(仅限数组运算),其运行速度可以接近C语言。
numba适用场景
1 使用numpy数组做大量科学计算时
2 使用for循环时
numba使用方式
import numpy as np
import numba
from numba import jit
@jit(nopython=True)
def t():
x = 0
for i in np.arange(5000):
x += i
return x
%timeit(t())
注:nopython = True选项要求完全编译该函数(以便完全删除Python解释器调用),否则会引发异常。这些异常通常表示函数中需要修改的位置,以实现优于Python的性能。强烈建议您始终使用nopython = True。
numba不适用场景
numba目前只支持Python原生函数和部分Numpy函数,其他场景下无效。
from numba import jit
import pandas as pd
x = {‘a’: [1, 2, 3], ‘b’: [20, 30, 40]}
@jit
def use_pandas(a): # Function will not benefit from Numba jit
df = pd.DataFrame.from_dict(a) # Numba doesn’t know about pd.DataFrame
df += 1 # Numba doesn’t understand what this is
return df.cov() # or this!
print(use_pandas(x))
上述代码中使用了Pandas,而Pandas并不是原生代码,而是更高层次的封装,Numba不能理解pandas内部在做什么,所以无法对其加速。
而一些常用的机器学习框架,比如scikit-learn, tensorflow, pyrorch等,已经做了大量的优化,不适合再使用Numba做加速。
推荐阅读:
【1】官方文档:https://numba.readthedocs.io/en/stable/user/5minguide.html
【2】https://luyixiao.blog.csdn.net/article/details/78586229
【3】https://cloud.tencent.com/developer/article/2196923