首页 > 社交 > 科普中国

使用numba加速你的python代码

常驻编辑 科普中国 2022-10-14 卷积   机器码   代码   正方形   数组   函数   入门   性能   语言   时间

Python 是一种解释型语言,它不需要编译为机器码,在执行的过程中实时被解释器解析执行,因此的它的速度相对于其他的一些编译型语言C/C++,Java等要慢很多,j87拜客生活常识网

但Python具有非常大的灵活性,易于上手,所以Python目前是非常受欢迎的编程语言。j87拜客生活常识网

如何提高Python的运行速度j87拜客生活常识网

提高python的运行速度有很多种方法这里列举两个j87拜客生活常识网

1 使用cython将python代码编译为c语言,在linux系统下非常推荐这样做。j87拜客生活常识网

2 使用ctypes,pybindll ,CFFI等调用C/C++库j87拜客生活常识网

但这些方法使用过程种多少是有一些学习成本的,不太适合刚入门的Python新手,这里推荐Numba库来加速数学类的计算密集型的Python代码。j87拜客生活常识网

numba加速计算密集型的代码j87拜客生活常识网

按照官网的定义numba将Python代码在运行过程使用工业标准的LLVM编译器库实时优化为机器码,经过numba优化后的python代码可以达到C语言或者FORTRAN的速度。j87拜客生活常识网

你不需要替换Python解释器,也不需要安装C/C++编译器,只需要使用numba修饰器修饰Python的函数,剩下的就交给Numba吧。j87拜客生活常识网

官网地址是:https://numba.pydata.org/j87拜客生活常识网

Numba的用法很丰富,这里只做最容易上手的入门说明j87拜客生活常识网

首先安装numbaj87拜客生活常识网

pip install numba或者conda install numbaj87拜客生活常识网

下面用大家喜欢用的蒙特卡洛模拟计算 π的代码来对比一下numba的加速效果,简单说明一下这个计算π的原理,蒙特卡洛模拟是使用大量随机逐渐发现真理的算法。下面的算法是说如果你在地上画一个正方形,在正方形中画一个圆,如果你从空中往下扔100万个小球,计算(落在圆形区域的球数)/(落在整个正方形区域内的球数)这个数字会近似π/4j87拜客生活常识网


j87拜客生活常识网

圆型的面积站总面的π/4j87拜客生活常识网


j87拜客生活常识网

蒙特卡洛模拟计算 π加速对比j87拜客生活常识网

使用numba只需要在函数上使用@njit来修饰函数即可,从结果来看,代码速度提升超过50倍,效果非常明显。需要注意的一点是numba加速的函数在第一次运行时速度会稍慢,因为第一次需要花费一些编译时间,这里的对比都是使用第二次运行的时间来做对比。j87拜客生活常识网

numba还有很多修饰符如下,这里我们只使用最常用的@njit来测试性能,这个修饰符已经满足入门新手的大部分的应用。j87拜客生活常识网

· @njitj87拜客生活常识网

· @vectorizej87拜客生活常识网

· @guvectorizej87拜客生活常识网

· @stencilj87拜客生活常识网

再举一个复杂一点的例子,我们使用python代码来实现一个低性能的深度机器学习的卷积操作,首先定义一个2d卷积函数j87拜客生活常识网


j87拜客生活常识网

卷积的低性能实现j87拜客生活常识网

这个低性能的卷积函数在Python下运行需要15秒左右j87拜客生活常识网

使用如下的代码做个测试,代码中使用一个3*3*3的随机卷积核对狗狗图像进行一次卷积j87拜客生活常识网


j87拜客生活常识网

j87拜客生活常识网

实现的效果就是一次随机的卷积,如下:j87拜客生活常识网


j87拜客生活常识网

j87拜客生活常识网

代码运行时间是15s左右,下面使用@njit对卷积函数做修饰用同样的代码在做一次卷积测试时间消耗在0.2s左右同样达到了超过50倍的加速j87拜客生活常识网


j87拜客生活常识网

仅仅使用@njit对同样的代码做修饰j87拜客生活常识网

Numba的使用场景

相关阅读:

  • 基于高光谱遥感的三维卷积神经网络分析
  • 人工智能助力发现强引力透镜候选体
  • 百度人脸鉴伪专利公布,可鉴别人脸是否伪造
  • 开源的中药图像识别系统(APP端+服务器端)
  • “方舟编译器”探索安卓性能极限,ios已没有优势!
  • 炉石卡组代码怎么用(炉石传说代码怎么用不了)
  • 伪代码怎么写(伪代码及其实例讲解)
  • 代码怎么写(自学代码)
  • gta5多少钱(steam免费拿GTA5代码)
  • 黑龙江在哪里(34个省代码)
    • 网站地图 |
    • 声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不做权威认证,如若验证其真实性,请咨询相关权威专业人士。