使用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中操作时间之strptime()方法的使用
Dec 30 Python
在Windows系统上搭建Nginx+Python+MySQL环境的教程
Dec 25 Python
python正则表达式之作业计算器
Mar 18 Python
使用python实现ANN
Dec 20 Python
Numpy数组的保存与读取方法
Apr 04 Python
Python subprocess模块常见用法分析
Jun 12 Python
Python实现base64编码的图片保存到本地功能示例
Jun 22 Python
Python骚操作之动态定义函数
Mar 26 Python
局域网内python socket实现windows与linux间的消息传送
Apr 19 Python
numpy数组广播的机制
Jul 12 Python
在pycharm中显示python画的图方法
Aug 31 Python
python 常见的排序算法实现汇总
Aug 21 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
Laravel中使用阿里云OSS Composer包分享
2015/02/10 PHP
基于php实现的php代码加密解密类完整实例
2016/10/12 PHP
PHP分页显示的方法分析【附PHP通用分页类】
2018/05/10 PHP
PHP+iframe模拟Ajax上传文件功能示例
2019/07/02 PHP
PHP 对象继承原理与简单用法示例
2020/04/21 PHP
(转载)JavaScript中匿名函数,函数直接量和闭包
2007/05/08 Javascript
jQuery代码优化 事件委托篇
2011/11/01 Javascript
jQuery之字体大小的设置方法
2014/02/27 Javascript
jQuery简易图片放大特效示例代码
2014/06/09 Javascript
原生js实现复制对象、扩展对象 类似jquery中的extend()方法
2014/08/30 Javascript
jQuery检测返回值的数据类型
2015/07/13 Javascript
javascript实现表单验证
2016/01/29 Javascript
Node.js检测端口(port)是否被占用的简单示例
2016/09/29 Javascript
很棒的一组js图片轮播特效
2017/01/12 Javascript
bootstrap fileinput 上传插件的基础使用
2017/02/17 Javascript
简单谈谈gulp-changed插件
2017/02/21 Javascript
jquery事件与绑定事件
2017/03/16 Javascript
AngularJS使用ocLazyLoad实现js延迟加载
2017/07/05 Javascript
详解A标签中href=""的几种用法
2017/08/20 Javascript
微信小程序 动画的简单实例
2017/10/12 Javascript
详解JSONObject和JSONArray区别及基本用法
2017/10/25 Javascript
纯JavaScript实现实时反馈系统时间
2017/10/26 Javascript
React Native 自定义下拉刷新上拉加载的列表的示例
2018/03/01 Javascript
vue使用nprogress加载路由进度条的方法
2020/06/04 Javascript
Openlayers实现地图的基本操作
2020/09/28 Javascript
python删除列表内容
2015/08/04 Python
使用Template格式化Python字符串的方法
2019/01/22 Python
纯CSS3实现漂亮的input输入框动画样式库(Text input love)
2018/12/29 HTML / CSS
美国家庭鞋店:Shoe Sensation
2019/09/27 全球购物
计算机应用专业毕业生求职信
2013/10/24 职场文书
培训主管的职业生涯规划
2014/03/06 职场文书
幼儿园教研活动总结
2014/04/30 职场文书
质量承诺书格式
2014/05/20 职场文书
Python代码风格与编程习惯重要吗?
2021/06/03 Python
详细聊聊关于Mysql联合查询的那些事儿
2021/10/24 MySQL
css3中2D转换之有趣的transform形变效果
2022/02/24 HTML / CSS