您现在的位置是:首页 >技术交流 >Python加速网站首页技术交流

Python加速

wqfhenanxc 2023-07-21 00:00:03
简介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

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。