python速度提升_提升python速度的利器:Numba

提升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号

收藏本站

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值