用 Numba 加速 Python 代码,变得像 C++ 一样快

Numba 是一个 Python JIT 编译器,能将计算密集型函数转换为机器码,大幅提升执行速度。通过简单的装饰器 @jit,无需离开 Python 代码舒适区,即可加速包括 numpy 库在内的计算。Numba 支持并行化、GPU 计算,并与其他工具如 cython、Pypy 相比,提供了更便捷的加速体验。@vectorize 装饰器允许将标量函数矢量化,适用于数组运算。同时,Numba 还提供了 CUDA 支持,允许在 GPU 上运行函数,进一步提升性能。
摘要由CSDN通过智能技术生成

1. 介绍

Numba 是 python 的即时(Just-in-time)编译器,即当你调用 python 函数时,你的全部或部分代码就会被转换为“即时”执行的机器码,它将以你的本地机器码速度运行!它由 Anaconda 公司赞助,并得到了许多其他组织的支持。

在 Numba 的帮助下,你可以加速所有计算负载比较大的 python 函数(例如循环)。它还支持 numpy 库!所以,你也可以在你的计算中使用 numpy,并加快整体计算,因为 python 中的循环非常慢。你还可以使用 python 标准库中的 math 库的许多函数,如 sqrt 等。有关所有兼容函数的完整列表,请查看 此处。

2. 为什么选择 Numba?

那么,当有像 cython 和 Pypy 之类的许多其他编译器时,为什么要选择 numba?

原因很简单,这样你就不必离开写 python 代码的舒适区。是的,就是这样,你根本不需要为了获得一些的加速来改变你的代码,这与你从类似的具有类型定义的 cython 代码获得的加速相当。那不是很好吗?

你只需要添加一个熟悉的 python 功能,即添加一个包装器(一个装饰器)到你的函数上。类的装饰器也在开发中了。

所以,你只需要添加一个装饰器就可以了。例如:

cd ~/pythia/data
from numba import jit
@jit
def function(x):
    # your loop or numerically intensive computations
    return x

这仍然看起来像一个原生 python 代码,不是吗?

3. 如何使用 Numba?

Numba 使用 LLVM 编译器基础结构 将原生 python 代码转换成优化的机器码。使用 numba 运行代码的速度可与 C/C++ 或 Fortran 中的类似代码相媲美。

以下是代码的编译方式:

首先,Python 函数被传入,优化并转换为 numba 的中间表达,然后在类型推断(type inference)之后,就像 numpy 的类型推断(所以 python float 是一个 float64),它被转换为 LLVM 可解释代码。然后将此代码提供给 LLVM 的即时编译器以生成机器码。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值