使用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 相关文章推荐
Python中用于转换字母为小写的lower()方法使用简介
May 19 Python
如何在Python函数执行前后增加额外的行为
Oct 20 Python
浅谈Python对内存的使用(深浅拷贝)
Jan 17 Python
PyQt5打开文件对话框QFileDialog实例代码
Feb 07 Python
解决Django的request.POST获取不到内容的问题
May 28 Python
python读取文本绘制动态速度曲线
Jun 21 Python
Python shutil模块用法实例分析
Oct 02 Python
大家都说好用的Python命令行库click的使用
Nov 07 Python
python误差棒图errorbar()函数实例解析
Feb 11 Python
Python读写操作csv和excle文件代码实例
Mar 16 Python
Python脚本如何在bilibili中查找弹幕发送者
Jun 04 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
Sep 03 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
从C/C++迁移到PHP——判断字符类型的函数
2006/10/09 PHP
php trim 去除空字符的定义与语法介绍
2010/05/31 PHP
php foreach 参数强制类型转换的问题
2010/12/10 PHP
JS类中定义原型方法的两种实现的区别
2007/03/08 Javascript
用AJAX返回HTML片段中的JavaScript脚本
2010/01/04 Javascript
理解Javascript_03_javascript全局观
2010/10/11 Javascript
jQuery的deferred对象使用详解
2011/08/20 Javascript
angular.foreach 循环方法使用指南
2015/01/06 Javascript
JS实现网页滚动条感应鼠标变色的方法
2015/02/26 Javascript
jQuery EasyUI 布局之动态添加tabs标签页
2015/11/18 Javascript
Javascript随机标签云代码实例
2016/06/21 Javascript
jQuery插件EasyUI实现Layout框架页面中弹出窗体到最顶层效果(穿越iframe)
2016/08/05 Javascript
Bootstrap作品展示站点实战项目2
2016/10/14 Javascript
js实现3D图片环展示效果
2017/03/09 Javascript
JS实现点击复选框变更DIV显示状态的示例代码
2017/12/18 Javascript
vue中element组件样式修改无效的解决方法
2018/02/03 Javascript
JavaScript之解构赋值的理解
2019/01/30 Javascript
JavaScript两种计时器的实例讲解
2019/01/31 Javascript
详解微信小程序实现仿微信聊天界面(各种细节处理)
2019/02/17 Javascript
详解Vue中组件传值的多重实现方式
2019/08/16 Javascript
AngularJs的$http发送POST请求,php无法接收Post的数据问题及解决方案
2020/08/13 Javascript
Js跳出两级循环方法代码实例
2020/09/22 Javascript
vue项目中js-cookie的使用存储token操作
2020/11/13 Javascript
Python使用MONGODB入门实例
2015/05/11 Python
Python2.x版本中cmp()方法的使用教程
2015/05/14 Python
详解Python做一个名片管理系统
2019/03/14 Python
python实现3D地图可视化
2020/03/25 Python
Ryderwear美国官网:澳大利亚高端健身训练装备品牌
2018/04/24 全球购物
自动化毕业生专业自荐书范文
2014/02/04 职场文书
自考毕业自我鉴定
2014/03/18 职场文书
优秀教师感人事迹材料
2014/05/04 职场文书
社区志愿者活动方案
2014/08/18 职场文书
新党章的学习心得体会
2014/11/07 职场文书
2016年离婚协议书范文
2016/03/18 职场文书
SpringBoot整合阿里云视频点播的过程详解
2021/12/06 Java/Android
python中pymysql包操作数据库方法
2022/04/19 Python