使用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中实现两个字典(dict)合并的方法
Sep 23 Python
python正则表达式中的括号匹配问题
Dec 14 Python
使用Python对IP进行转换的一些操作技巧小结
Nov 09 Python
python 简单备份文件脚本v1.0的实例
Nov 06 Python
Python拼接微信好友头像大图的实现方法
Aug 01 Python
Python多线程处理实例详解【单进程/多进程】
Jan 30 Python
用Python获取摄像头并实时控制人脸的实现示例
Jul 11 Python
python带参数打包exe及调用方式
Dec 21 Python
Python for循环通过序列索引迭代过程解析
Feb 07 Python
Python识别html主要文本框过程解析
Feb 18 Python
通过案例解析python鸭子类型相关原理
Oct 10 Python
Python排序函数的使用方法详解
Dec 11 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
虹吸壶是谁发明的?煮出来的咖啡好喝吗
2021/03/04 冲泡冲煮
连接到txt文本的超链接,不直接打开而是点击后下载的处理方法
2009/07/01 PHP
深入理解PHP原理之异常机制
2010/08/21 PHP
php图像处理函数大全(推荐收藏)
2013/07/11 PHP
php延迟静态绑定实例分析
2015/02/08 PHP
php5与php7的区别点总结
2019/10/11 PHP
HTML中事件触发列表与解说
2007/07/09 Javascript
javascript操作字符串的原生方法
2014/12/22 Javascript
JavaScript中的Truthy和Falsy介绍
2015/01/01 Javascript
jQuery中andSelf()方法用法实例
2015/01/08 Javascript
javascript正则表达式之search()用法实例
2015/01/19 Javascript
理解javascript中的原型和原型链
2015/07/30 Javascript
JS闭包、作用域链、垃圾回收、内存泄露相关知识小结
2016/05/16 Javascript
bootstrap 表单验证使用方法
2017/01/11 Javascript
JS自定义滚动条效果简单实现代码
2020/10/27 Javascript
详解基于webpack2.x的vue2.x的多页面站点
2017/08/21 Javascript
Scala解析Json字符串的实例详解
2017/10/11 Javascript
用最少的JS代码写出贪吃蛇游戏
2018/01/12 Javascript
Vue中的Props(不可变状态)
2018/09/29 Javascript
Vue项目pdf(base64)转图片遇到的问题及解决方法
2018/10/19 Javascript
JS中call()和apply()的功能及用法实例分析
2019/06/28 Javascript
Vue实现将数据库中带html标签的内容输出(原始HTML(Raw HTML))
2019/10/28 Javascript
javascript History对象原理解析
2020/02/17 Javascript
js实现网页随机验证码
2020/10/19 Javascript
[06:16]DOTA2守卫传承者——职业选手谈心路历程
2015/02/26 DOTA
在Django中创建第一个静态视图
2015/07/15 Python
pandas 两列时间相减换算为秒的方法
2018/04/20 Python
Python简单读写Xls格式文档的方法示例
2018/08/17 Python
django连接mysql配置方法总结(推荐)
2018/08/18 Python
详解python中*号的用法
2019/10/21 Python
tensorflow之读取jpg图像长和宽实例
2020/06/18 Python
一篇文章搞懂python的转义字符及用法
2020/09/03 Python
css3的动画特效之动画序列(animation)
2017/12/22 HTML / CSS
节能宣传周活动总结
2014/05/08 职场文书
教师廉洁自律承诺书
2014/05/26 职场文书
MySQL 数据 data 基本操作
2022/05/04 MySQL