使用numba对Python运算加速的方法


Posted in Python onOctober 15, 2018

有时候需要比较大的计算量,这个时候Python的效率就很让人捉急了,此时可以考虑使用numba 进行加速,效果提升明显~

(numba 安装貌似很是繁琐,建议安装Anaconda,里面自带安装好各种常用科学计算库)

from numba import jit

@jit
def t(count=1000):
 total = 0
 for i in range(int(count)):
  total += i
 return total

测试效果:

(关于__wrapped__ 见我的博文: 浅谈解除装饰器作用(python3新增) )

In [17]: %timeit -n 1 t.__wrapped__()
1 loop, best of 3: 52.9 µs per loop

In [18]: %timeit -n 1 t()
The slowest run took 13.00 times longer than the fastest. This could mean that an intermediate result is being cached.
1 loop, best of 3: 395 ns per loop

可以看到使用jit 加速后,即使设置测试一次,实际上还是取了三次的最优值,如果取最坏值(因为最优值可能是缓存下来的),则耗时为395ns * 13 大概是5us 还是比不使用的52.9us 快上大概10倍,

增大计算量可以看到使用numba加速后的效果提升更加明显,

In [19]: %timeit -n 10 t.__wrapped__(1e6)
10 loops, best of 3: 76.2 ms per loop

In [20]: %timeit -n 1 t(1e6)
The slowest run took 8.00 times longer than the fastest. This could mean that an intermediate result is being cached.
1 loop, best of 3: 790 ns per loop

如果减少计算量,可以看到当降到明显小值时,使用加速后的效果(以最差计)与不加速效果差距不大,因此如果涉及到较大计算量不妨使用jit 加速下,何况使用起来这么简便。

%timeit -n 1 t(10)
1 loop, best of 3: 0 ns per loop

%timeit -n 100 t.__wrapped__(10)
100 loops, best of 3: 1.79 µs per loop

%timeit -n 1 t(1)
The slowest run took 17.00 times longer than the fastest. This could mean that an intermediate result is being cached.
1 loop, best of 3: 395 ns per loop

%timeit -n 100 t.__wrapped__(1)
100 loops, best of 3: 671 ns per loop

以上这篇使用numba对Python运算加速的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
wxpython学习笔记(推荐查看)
Jun 09 Python
Python中关于字符串对象的一些基础知识
Apr 08 Python
Python字符串中查找子串小技巧
Apr 10 Python
Python实现二维有序数组查找的方法
Apr 27 Python
python实现决策树分类算法
Dec 21 Python
基于Python新建用户并产生随机密码过程解析
Oct 08 Python
关于python pycharm中输出的内容不全的解决办法
Jan 10 Python
python设置环境变量的作用整理
Feb 17 Python
python高阶函数map()和reduce()实例解析
Mar 16 Python
python3 使用openpyxl将mysql数据写入xlsx的操作
May 15 Python
使用darknet框架的imagenet数据分类预训练操作
Jul 07 Python
Matlab求解数组中的最大值及它所在的具体位置
Apr 16 Python
浅谈解除装饰器作用(python3新增)
Oct 15 #Python
python  创建一个保留重复值的列表的补码
Oct 15 #Python
python 美化输出信息的实例
Oct 15 #Python
python  Django中的apps.py的目的是什么
Oct 15 #Python
使用Python监视指定目录下文件变更的方法
Oct 15 #Python
Python调用adb命令实现对多台设备同时进行reboot的方法
Oct 15 #Python
彻彻底底地理解Python中的编码问题
Oct 15 #Python
You might like
PHP memcache扩展的三种安装方法
2009/04/26 PHP
PHP时间戳与日期之间转换的实例介绍
2013/04/19 PHP
基于PHP生成静态页的实现方法
2013/05/10 PHP
PHP笔记之:基于面向对象设计的详解
2013/05/14 PHP
具有时效性的php加密解密函数代码
2013/06/19 PHP
codeigniter教程之多文件上传使用示例
2014/02/11 PHP
PHP中多维数组的foreach遍历示例
2014/06/13 PHP
JQuery Tips(2) 关于$()包装集你不知道的
2009/12/14 Javascript
Jquery 的扩展方法总结
2011/10/01 Javascript
更优雅的事件触发兼容
2011/10/24 Javascript
Javascript自定义排序 node运行 实例
2013/06/05 Javascript
原生javascript实现无间缝滚动示例
2014/01/28 Javascript
window resize和scroll事件的基本优化思路
2014/04/29 Javascript
浅谈JavaScript中的Math.atan()方法的使用
2015/06/14 Javascript
JavaScript之AOP编程实例
2015/07/17 Javascript
JavaScript中解决多浏览器兼容性23个问题的快速解决方法
2016/05/19 Javascript
浅谈Webpack多页应用HMR卡住问题
2019/04/24 Javascript
使用原生js编写一个简单的框选功能方法
2019/05/13 Javascript
中高级前端必须了解的JS中的内存管理(推荐)
2019/07/04 Javascript
jquery.pager.js实现分页效果
2019/07/29 jQuery
python opencv实现运动检测
2018/07/10 Python
Python高级特性切片(Slice)操作详解
2018/09/27 Python
pytorch 固定部分参数训练的方法
2019/08/17 Python
python GUI库图形界面开发之PyQt5打印控件QPrinter详细使用方法与实例
2020/02/28 Python
详解numpy.ndarray.reshape()函数的参数问题
2020/10/13 Python
pandas处理csv文件的方法步骤
2020/10/16 Python
法学专业自我鉴定
2014/02/05 职场文书
竞聘书怎么写,如何写?
2014/03/31 职场文书
小学老师寄语大全
2014/04/04 职场文书
企业文化标语口号
2014/06/09 职场文书
税务干部群众路线教育实践活动对照检查材料
2014/09/20 职场文书
学校食品安全责任书
2015/01/29 职场文书
大学毕业论文致谢词
2015/05/14 职场文书
汽车修理厂管理制度
2015/08/05 职场文书
2019旅游导游工作总结
2019/06/27 职场文书
nginx作grpc的反向代理踩坑总结
2021/07/07 Servers