Numba是Python的一个JIT库,可以很方便的通过一个装饰器来实现运行时的加速。这两天初步使用了一下,有点心得体会:

1, numba喜欢for循环,有for循环的python代码(看起来像C的风格),加速效果很好;

2, numba喜欢numpy;

不过,简单的函数不要用,比如两个ndarray做减法,a-y,就不要使用@njit;

4, 如果某函数中调用的其它函数已经使用了numba的@jit或@njit,再对这个函数加速的效果就基本看不出来。

5, 还有一种不加速的情况,函数中只是调用了一个numpy函数,没有别的什么操作,这种情况,在加速和不加速的情况下,用timeit测试的结果差不多,或者只是一点点轻微的加速。(比如函数只有一句:return np.dot(a,b))

所以,如果函数中没有list comprehension,而且有for循环,可以使用@jit来加速;如果函数中全是numpy的操作,可以使用@njit来加速。

使用numba来加速代码的运行,简单上手快,比Cython好用,不过也需要考虑Python代码的可读性,不推崇一味为了加速而改写代码。使用numba,就是在速度和可读性之间寻找一个平衡位置。

下面是我自己的一段for循环用numba来加速的测试代码:

>>> from numba import jit

>>> def t1():

... return sum([x for x in range(5000)])

...

>>> @jit

... def t2():

... x = 0

... for i in range(5000):

... x += i

... return x

...

>>> timeit('t1()', number=10000, globals=globals())

3.092034629000409

>>> timeit('t1()', number=10000, globals=globals())

3.148597596002219

>>> timeit('t2()', number=10000, globals=globals())

0.11772040499636205

>>> timeit('t2()', number=10000, globals=globals())

0.0019229380050092004

>>> timeit('t2()', number=10000, globals=globals())

0.0019260349945398048

>>> timeit('t2()', number=10000, globals=globals())

0.002125131999491714

>>>

t1和t2功能完全相同,t1执行10000次3秒左右,而经过numba的@jit加速后,t2执行10000次只需要0.002秒左右,太恐怖了......用C风格写for循环,用@jit来加速,虽然有违Python的风格,但是却获得了实实在在的加速。

python numba_Numba初步使用经验相关推荐

  1. Python的初步认知与安装步骤 (小白必备)

    Python的初步认知与安装步骤 Python初步认知 安装步骤 基础代码测试(变量.数据类型) 运算符.条件结构.循环结构 思维导图 Python初步认知 Python简介 Python是一种跨平台 ...

  2. Python语言初步

    Python语言初步 Python语言初步 1.python环境安装 2.第一个程序 3.一个突发奇想的idea:请手打出你会的语言的HelloWorld代码? 4.基础知识 4.1 字符编码 4.2 ...

  3. python爬虫初步了解 定时任务 以及浏览器自动工作

    # Python爬虫初步了解import requests #在配置了环境下cmd启用pip install requests否则到安装路径cmd再启用代码下载 #引入requests库 res = ...

  4. Python爬虫初步

    Python爬虫初步 这里要介绍一下urllib2这个模块 作用:主要是用于打开url. 核心方法: - urlopen(url[, data][, timeout]) - 打开一个url,该url参 ...

  5. 这个干货值得看|用Python来初步探索黄金的最佳建仓时机

    近期,国际金价持续创新高,也激发了很多人黄金投资的热情.目前国内黄金市场存在实物黄金.纸黄金.黄金T+D.黄金期货.黄金ETF.黄金股.现货黄金等品种,交易规则错综复杂,不仅要判断对趋势,还要为爆仓. ...

  6. python爬虫-初步使用Scrapy分布式爬虫(爬取mcbbs整合包保存名称及主要mod),大爱MC

    首先介绍一下scrapy. Scrapy一个开源和协作的框架,是为了页面抓取所设计的,使用它可以快速.简单.可扩展(通过中间件)的方式从网站中提取所需的数据. 工作流程如下 Scrapy Engine ...

  7. python刚开始什么都不能_关于python的初步学习

    在学习python之前,学习过C,JAVA,众所周知这是两种不同的语言,C语言更偏向于底层逻辑,JAVA 则是一种面向对象的语言,在真正开始学习并使用python之前,我用python都是用的C语言的 ...

  8. 初中python编程初步教学设计_初中Python程序设计顺序结构教学设计方案.docx

    教学设计方案一<顺序结构程序设计> 一.教学目标 (1)知识与技能 能够根据问题分析,设计顺序结构程序的算法 能够运用顺序结构,使用 Python程序编写.调试并运行代码 (2)过程与方法 ...

  9. Python win32com初步实现将批量的Word文件信息统计写入同一Excel表格中

    环境搭建: Python 3.7(可参考博客:https://blog.csdn.net/qq_25814003/article/details/80609729) docx模块(命令行环境下输入:p ...

最新文章

  1. 【sgTopo】强哥古法炮制、纯手工打造简单拓扑图、流程图、思维导图组件(完善中ing)
  2. Comparable和Comparator使用区别
  3. iOS之深入解析Objective-C和Swift初始化
  4. 使用腾讯开发平台获取QQ用户数据资料
  5. Java中几种常量池的区分
  6. 解决vue+axios post参数后端无法接收的问题
  7. 蓝桥杯单片机:13届省赛模拟
  8. css_input[checked]复选框去掉默认样式并添加新样式
  9. 受婴儿抓阄启发,谷歌让机器臂自学抓取物体,不用标注数据
  10. 如何学习嵌入式开发必备技能
  11. 本模型基于Cruise软件搭建整车模型,基于Matlab/Simulink软件搭建整车控制模块,包括整车模式控制、扭矩分配
  12. 易佳门诊收费系统 v8.5 免费
  13. UTM投影的选择(地区-投影带)
  14. linux 共享文件夹 权限
  15. copy和strong的区别
  16. ps修改社保照片 不大于20KB
  17. Microsoft Teams Rooms Content Camera 革命性更新
  18. 帝国cms 多值字段在投稿表单中的样式设置
  19. 分享几个免费高清图片素材网站---已解决
  20. postgres支持AES加密配置

热门文章

  1. 如何在程序中获得其他程序的 图标?
  2. 照明用哪种灯比较护眼?推荐专业的护眼照明灯
  3. 十二栋文化获近亿元 B 轮融资,险峰旗云独投 1
  4. 2.1.2 奈奎斯特定理与香农定理
  5. 电容笔有必要买最好的吗?推荐的ipad手写笔
  6. 强化学习_02_DataWhale马尔可夫决策过程习题
  7. Android自定义动画三-SVG动画
  8. 新版思科CCNA认证1.0 零基础入门技术VTP协议解析-ielab网络实验室
  9. html5哪个属性规定输入字段是必填的,HTML5基础知识习题及答案
  10. Android 7.1 设置默认启动桌面,并设置为主屏幕应用