使用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 读写txt文件 json文件的实现方法
Oct 22 Python
python清除字符串中间空格的实例讲解
May 11 Python
Python中的函数式编程:不可变的数据结构
Oct 08 Python
python处理multipart/form-data的请求方法
Dec 26 Python
Python中numpy模块常见用法demo实例小结
Mar 16 Python
浅析Python3中的对象垃圾收集机制
Jun 06 Python
Python 图像处理: 生成二维高斯分布蒙版的实例
Jul 04 Python
numpy实现神经网络反向传播算法的步骤
Dec 24 Python
python eventlet绿化和patch原理
Nov 21 Python
Python包argparse模块常用方法
Jun 04 Python
Python pandas求方差和标准差的方法实例
Aug 04 Python
Python中re模块的元字符使用小结
Apr 07 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 图片文件上传实现代码
2010/12/29 PHP
php DOS攻击实现代码(附如何防范)
2012/05/29 PHP
php三元运算符知识汇总
2015/07/02 PHP
PHP实现一维数组与二维数组去重功能示例
2018/05/24 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
用js实现手把手教你月入万刀(转贴)
2007/11/07 Javascript
jquery实现漂浮在网页右侧的qq在线客服插件示例
2013/05/13 Javascript
js下拉菜单语言选项简单实现
2013/09/23 Javascript
JS定时器实例详细分析
2013/10/11 Javascript
JavaScript获得url查询参数的方法
2015/07/02 Javascript
基于javascript实现窗口抖动效果
2016/01/03 Javascript
关于RequireJS的简单介绍即使用方法
2016/10/20 Javascript
Vue项目History模式404问题解决方法
2018/10/31 Javascript
详解关于element el-button使用$attrs的一个注意要点
2018/11/09 Javascript
webpack自动打包和热更新的实现方法
2019/06/24 Javascript
Python基于twisted实现简单的web服务器
2014/09/29 Python
用Python3创建httpServer的简单方法
2018/06/04 Python
解决python 未发现数据源名称并且未指定默认驱动程序的问题
2018/12/07 Python
python之pyqt5通过按钮改变Label的背景颜色方法
2019/06/13 Python
python自动结束mysql慢查询会话的实例代码
2019/10/27 Python
matplotlib绘制多个子图(subplot)的方法
2019/12/03 Python
Python计算指定日期是今年的第几天(三种方法)
2020/03/26 Python
不同浏览器对CSS3和HTML5的支持状况
2009/10/31 HTML / CSS
专注澳大利亚特产和新西兰特产的澳洲中文网:0061澳洲制造
2019/03/24 全球购物
电影T恤、80年代T恤和80年代服装:TV Store Online
2020/01/05 全球购物
数组越界问题
2015/10/21 面试题
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
2013/05/03 面试题
介绍一下Prototype的$()函数,$F()函数,$A()函数都是什么作用?
2014/03/05 面试题
会计专业自荐信范文
2013/12/02 职场文书
护士进修自我鉴定
2014/02/07 职场文书
歌舞青春观后感
2015/06/10 职场文书
导游词之京东大峡谷旅游区
2019/10/29 职场文书
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/04/22 无线电
Java spring单点登录系统
2021/09/04 Java/Android
python工具dtreeviz决策树可视化和模型可解释性
2022/03/03 Python
微信小程序调用python模型
2022/04/21 Python