提升python速度的利器:Numba
python由于它动态解释性语言的特性,跑起代码来相比java、c++要慢很多,尤其在做科学计算的时候,十亿百亿级别的运算,让python的这种劣势更加凸显。
办法永远比困难多,Numba就是解决python慢的一大利器,可以让python的运行速度提升上百倍!
什么是Numba?
Numba是一款可以将python函数编译为机器代码的JIT编译器,经过Numba编译的python代码(仅限数组运算),其运行速度可以接近C或FORTRAN语言。
python之所以慢,是因为它是靠CPython编译的,Numba的作用是给python换一种编译器。
Numba适合科学计算
numpy是为面向numpy数组的计算任务而设计的。
在面向数组的计算任务中,数据并行性对于像GPU这样的加速器是很自然的。Numba了解NumPy数组类型,并使用它们生成高效的编译代码,用于在GPU或多核CPU上执行。特殊装饰器还可以创建函数,像numpy函数那样在numpy数组上广播。
什么情况下使用Numba呢?
使用numpy数组做大量科学计算时
使用for循环时
使用Numba非常简单,只需要将Numba装饰器应用到python函数中,无需改动原本的python代码,Numba会自动完成剩余的工作。
实验:numba对比numpy
安装Numba
在一台新机器上安装安装Numba共四步。
更新源
!apt update -y
安装llvm-10
!apt install llvm-10 -y
进行环境变量配置,并生效环境变量
复制以下命令在右侧ssh窗口运行
echo 'export LLVM_CONFIG=/usr/bin/llvm-config-10' >> ~/.bashrc
source ~/.bashrc
使用pip3安装numba
!pip3 install numba -i https://pypi.tuna.tsinghua.edu.cn/simple
传入Numba装饰器jit,对编写的函数进行装饰
import numpy as np
import numba
from numba import jit
import random
@jit(nopython=True)
def monte_carlo_pi(nsamples):
acc = 0
for i in range(nsamples):
x = random.random()
y = random.random()
if (x ** 2 + y ** 2) < 1.0:
acc += 1
return 4.0 * acc / nsamples
nopython = True选项要求完全编译该函数(以便完全删除Python解释器调用),否则会引发异常。这些异常通常表示函数中需要修改的位置,以实现优于Python的性能。强烈建议您始终使用nopython = True。
跑10轮,每轮执行1000次该函数
%%timeit -n 1000 -r 10
monte_carlo_pi(1000)
不经Numba加速的函数执行时间的对比
import random
def monte_carlo_pi_none_numba(nsamples):
acc = 0
for i in range(nsamples):
x = random.random()
y = random.random()
if (x ** 2 + y ** 2) < 1.0:
acc += 1
return 4.0 * acc / nsamples
%%timeit -n 1000 -r 10
monte_carlo_pi_none_numba(1000)
两者对比,速度从500ms左右,提升到50ms左右。约10倍的速度提升。
实验:numba对比Python函数
前面已经对比了Numba使用前后,python代码速度提升了40倍,但这还不是最快的。
这次,我们不使用numpy数组,仅用for循环,看看nunba对for循环到底有多钟爱!
# 不使用numba进行加速的
def t_none_numba():
x = 0
for i in np.arange(5000):
x += i
return x
%%time
t_none_numba()
# 使用Numba的情况
import numba
from numba import jit
@jit(nopython=True)
def t():
x = 0
for i in np.arange(5000):
x += i
return x
%%time
t()
使用Numba后速度的提升从3ms左右,提升到3µs左右,是从ms到µs量级的提升!
结语
Numba对python代码运行速度有巨大的提升,这极大的促进了大数据时代的python数据分析能力,对数据科学工作者来说,这真是一个lucky tool !
移动端设备除iPad Pro外,其它移动设备仅能阅读基础的文本文字。
建议使用PC或笔记本电脑,本站暂不支持微软IE/Edge浏览器,推荐使用Chrome或FireFox进行浏览,以开启左侧互动实验区来提升学习效率,推荐使用的分辨率为1920x1080或更高。
我们坚信最好的学习是参与其中这一理念,并致力成为中文互联网上体验更好的学练一体的IT技术学习交流平台。
您可加QQ群:575806994,一起学习交流技术,反馈网站使用中遇到问题。
内容、课程、广告等相关商务合作请扫描右侧二维码添加好友。
Copyright 2020 FreeAIHub.com
网站备案号:京ICP备19043805号
收藏本站