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 可解释代码。然后将此代