目录
numba库介绍
1.介绍 GitHub链接
numba是python的即时编译器,当调用python函数时,全部或部分代码会被替换为机器码执行!由Anaconda公司赞助。numba可以加速计算负载比较大的python函数(例如循环),主要针对浮点数,支持numpy库。
2.安装
# Ubuntu18
apt install llvm
pip3 install numba
# 使用anaconda
conda install numba
3.基本使用
# 示例
from numba import jit
import numpy as np
x= np.arange(100).reshape(10,10)
@jit(nopython=True)
def go_fast(a):
trace=0
for i in range(a.shape[0]):
trace += np.tanh(a[i,i])
return a+trace
print(go_fast(x))
@jit 表示尽可能加速,但对于无法加速的函数和类型仍使用python
@njit 表示全部使用加速,可能会变得更慢,等同于@jit(nopython=True)
需要注意的是numba不理解pandas的DataFrame格式。
4.其他装饰器
@vectorize
生成numpy的ufunc,支持所有ufunc方法,可以支持配置精度。
'''
@vectorize([int32(int32, int32),
int64(int64, int64),
float32(float32, float32),
float64(float64, float64)])
def f(x, y):
return x + y
'''
https://numba.pydata.org/numba-doc/latest/user/vectorize.html#vectorize
@guvectorize
生成numpy的广义ufunc,可以直接定义数组。
https://numba.pydata.org/numba-doc/latest/user/vectorize.html#guvectorize
@stencil
将函数声明为类似stencil类型操作的核函数。
@jitclass
基于jit类。
@cfunc
声明一个函数用作本地回调。
@overload
注册自己的函数实现,以便在nopython中使用。
其他装饰器参数:
parallel=True
启用函数的自动并行化。
fastmath=True
启用函数的快速数学行为。
cffi
在nopython模式下支持调用cffi函数。
ctypes
在nopython模式下支持调用ctypes包装函数。