前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用numba給Python代码加速 [0]

利用numba給Python代码加速 [0]

作者头像
用户6021899
发布2021-12-30 16:03:10
3370
发布2021-12-30 16:03:10
举报
文章被收录于专栏:Python编程 pyqt matplotlib

Numba 利用LLVM将python函数编译成优化后的机器码。Numba编译的由python写的数学算法能够接近C或Fortran的运行速度。LLVM 不仅能编译numba代码,还擅长优化它。

流程如下:

python bytecode ->Numba analyzers ->Numba LLVM IR generator ->

LLVM IR optimizers ->LLVM backend compiler ->Native x86/x64 code

LLVM 命名最早源自于底层虚拟机(Low Level Virtual Machine)的缩写。LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time),对开发者保持开放,并兼容已有脚本。

你不需要安装C/C++ 编译器,也不需要独立的编译步骤,只需要将numba装饰器应用于你的python函数,numba会完成编译与优化。

下面以一个概率法计算圆周率的例子开始:

代码语言:javascript
复制
from numba import jit,float32, int64
import random
import time


#@jit()
#@jit(nopython=True)
@jit(float32(int64), nopython=True, cache=True, nogil=True)
#@jit(float32(int64), nopython=True, parallel=True)
#@cuda.jit()
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


if __name__ == '__main__':
    since = time.time()
    x = monte_carlo_pi(10000000)
    print("time elapsed: ", time.time() - since)
    print("pi calculated is ", x)

这段代码如果不利用numba加速,在我的电脑上运行大约需要5.5s。

应用numba装饰器后,运行只需0.13s,只需原来40分之一不到的时间,甚至比自己写的对应的C++代码的运行时间还短。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档