Numba使用总结

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.1693580150604248

    # 程序 对 函数相同类型的入参 直接读取缓存中的编辑 运行,速度非常快
    one = time.time()
    print(go_fast(100000))
    print(time.time() - one)  # 1.9073486328125e-06

 

易错注意:

  • 在 被 numba的 jit装饰的 函数 内部 如果要调用其他函数,则其他函数也应该 被 jit装饰,否则报错如下: 

numba.core.errors.TypingError: Failed in nopython mode pipeline (step: nopython frontend)
Untyped global name 'other_func': cannot determine Numba type of <class 'function'>

 

相关链接:

https://numba.pydata.org/

 

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值