
Numba is a just-in-time compiler for Python that works best on code that uses NumPy arrays and functions, and loops.
Numba特点:
- Numba是Python的即时编译器,在使用NumPy数组和函数以及循环的代码上效果最佳。就是让你代码运行速度更快;
- 能让python代码达到C语言的速度;
- 支持在多个CPU内核上并行计算;
- 支持 英伟达和 AMD 显卡计算;
注意点:
- numba在进行第一次编译时需要一定时间,后续操作 对入参同一种类型时,直接读取缓存的编译运行,会非常快! 所以在测试性能时 注意测试方式;
- 对于循环数较少的情况 和 一般的 numpy代码 优化效果不明显;
- numba可以通过简单的装饰器实现编译功能; 被编译的函数内部 不能调用其他函数,如果非要调用,则 其他函数也要 加上 numba的编译装饰器;
如下简单示例:
import time from numba import jit @jit(nopython=True, cache=True) def other_func(): return 1 @jit(nopython=True, cache=True) def go_fast(a): x = 0 for item in range(int(a)): x += item other_func() return x if __name__ == '__main__': # 程序第一次 编译运行,速度有些慢 one = time.time() print(go_fast(50000)) print(time.time() - one) # 0.04248 # 程序 对 函数相同类型的入参 直接读取缓存中的编辑 运行,速度非常快 one = time.time() print(go_fast()) print(time.time() - one) # 1.25e-06
易错注意:
- 在 被 numba的 jit装饰的 函数 内部 如果要调用其他函数,则其他函数也应该 被 jit装饰,否则报错如下:
相关链接:
https://numba.pydata.org/
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/211309.html原文链接:https://javaforall.net
