通过numba模块给Python代码提速的方法详解

 更新时间:2022年01月13日 10:42:58   作者:三爷带你飞  
numba是Anaconda公司开发的针对Python的开源JIT编译器,用于提供Python版CPU和GPU编程,速度比原生Python快数十倍。本文将详细介绍一下numba是如何实现代码提速的,需要的可以参考一下

简介:numba是Anaconda公司开发的针对Python的开源JIT编译器,用于提供Python版CPU和GPU编程,速度比原生Python快数十倍。numba是第三方库,可以在运行时将Python代码编译为本地机器指令,而不会强制大幅度的改变普通的Python代码,使得在部分场景下执行Python的效率得到飞速的提升。

工作原理对比:

Python文件执行过程

1、.py文件通过解释器转化为虚拟机可以执行的字节码(.pyc);字节码在虚拟机上执行,得到结果。

2、字节码是一种只能运行在虚拟机上的文件,默认后缀.pyc,Python生成.pyc之后一般放在内存中继续使用,并不是每次都将.pyc文件保存到磁盘上。

而在JIT(Just-In-Time)技术中,JIT编译器将Python源代码.py直接编译成机器可以执行的机器语言(机器码),就可以直接在CPU等硬件上运行。这样,JIT就跳过了原来的虚拟机,执行速度几乎与用C语言编程速度无差别。

numba是Anaconda公司开发的针对Python的开源JIT编译器。谷歌开源的jax库也是属于jit编译器之一,该模块则主要应用于科学计算和机器学习方向。

安装:如网络限制,请绕道国内镜像豆瓣源,清华源等。pip安装第三方库全攻略:普通安装、安装whl后缀文件、使用国内镜像安装

pip install numba

使用方法:

from numba import jit
对函数进行装饰@jit(nopython=True)

注意事项:numba只符合部分场景,特殊场景无法使用。例如机器学习训练数据时,不能简单的进行装饰使用,否则会抛出异常。

源码:

from numba import jit
import datetime


def calc_sum1(loop):
    n = 0
    for i in range(loop):
        for j in range(loop):
            n += j
    return n


@jit(nopython=True)
def calc_sum2(loop):
    n = 0
    for i in range(loop):
        for j in range(loop):
            n += j
    return n


@jit(nopython=True)
def calc_sum2(loop):
    n = 0
    for i in range(loop):
        for j in range(loop):
            n += j
    return n


if __name__ == '__main__':
    print(datetime.datetime.now())
    r1 = calc_sum1(10000)
    print(r1)
    print(datetime.datetime.now())

    print("*" * 30)
    print(datetime.datetime.now())
    r2 = calc_sum2(10000)
    print(r2)
    print(datetime.datetime.now())

结果对比:原始代码执行需要花费5秒左右,而使用numba装饰后仅需300毫秒左右,提升10倍有余。如果loop设置的参数更长,numba装饰后执行的结果更佳。

到此这篇关于通过numba模块给Python代码提速的方法详解的文章就介绍到这了,更多相关Python numba代码提速内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python+OpenCV检测灯光亮点的实现方法

    Python+OpenCV检测灯光亮点的实现方法

    这篇文章主要介绍了Python+OpenCV检测灯光亮点的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Django中使用Celery的方法步骤

    Django中使用Celery的方法步骤

    这篇文章主要介绍了Django中使用Celery,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Vs Code中8个好用的python 扩展插件

    Vs Code中8个好用的python 扩展插件

    这篇文章主要介绍了Vs Code中8个好用的python 扩展插件,帮助大家更好的利用vs code进行python开发,感兴趣的朋友可以了解下
    2020-10-10
  • 通过实例解析python and和or使用方法

    通过实例解析python and和or使用方法

    这篇文章主要介绍了通过实例解析python and和or使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • python 通过类中一个方法获取另一个方法变量的实例

    python 通过类中一个方法获取另一个方法变量的实例

    今天小编就为大家分享一篇python 通过类中一个方法获取另一个方法变量的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • Matplotlib直方图绘制中的参数bins和rwidth的实现

    Matplotlib直方图绘制中的参数bins和rwidth的实现

    本文主要介绍了Matplotlib直方图绘制中的参数bins和rwidth的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-02-02
  • Python生成密码库功能示例

    Python生成密码库功能示例

    这篇文章主要介绍了Python生成密码库功能,涉及Python基于随机字符串实现的生成密码功能相关操作技巧,需要的朋友可以参考下
    2017-05-05
  • 深入理解Python中的函数参数传递机制

    深入理解Python中的函数参数传递机制

    在Python中,对于函数的参数传递,有两种主要的方式:传值和传引用。事实上,Python的参数传递是一种“传对象引用”的方式,本文呢我们将详细介绍Python的函数参数传递机制,这对理解Python编程语言的底层实现以及优化你的代码都非常有帮助
    2023-07-07
  • Python 数据结构之旋转链表

    Python 数据结构之旋转链表

    这篇文章主要介绍了Python 数据结构之旋转链表的相关资料,需要的朋友可以参考下
    2017-02-02
  • Python编写生成验证码的脚本的教程

    Python编写生成验证码的脚本的教程

    这篇文章主要介绍了Python编写生成验证码的脚本的教程,验证码在web编程中几乎是必备的功能,需要的朋友可以参考下
    2015-05-05

最新评论