使用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新手经常遇到的17个错误分析
Jul 30 Python
python读取json文件并将数据插入到mongodb的方法
Mar 23 Python
Python中的默认参数详解
Jun 24 Python
python spyder中读取txt为图片的方法
Apr 27 Python
浅谈Python traceback的优雅处理
Aug 31 Python
图文详解python安装Scrapy框架步骤
May 20 Python
pyqt5 获取显示器的分辨率的方法
Jun 18 Python
Python语言异常处理测试过程解析
Jan 08 Python
Python实现随机生成任意数量车牌号
Jan 21 Python
pandas中read_csv、rolling、expanding用法详解
Apr 21 Python
Python中三维坐标空间绘制的实现
Sep 22 Python
Numpy ndarray 多维数组对象的使用
Feb 10 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
初探PHP5
2006/10/09 PHP
php a simple smtp class
2007/11/26 PHP
PHP中调用ASP.NET的WebService的代码
2011/04/22 PHP
php将url地址转化为完整的a标签链接代码(php为url地址添加a标签)
2014/01/17 PHP
thinkphp3查询mssql数据库乱码解决方法分享
2014/02/11 PHP
php使用GeoIP库实例
2014/06/27 PHP
PHP+jQuery+Ajax实现分页效果 jPaginate插件的应用
2015/10/09 PHP
详解PHP的Yii框架中自带的前端资源包的使用
2016/03/31 PHP
yii2中结合gridview如何使用modal弹窗实例代码详解
2016/06/12 PHP
PHP给前端返回一个JSON对象的实例讲解
2018/05/31 PHP
Javascript中eval函数的使用方法与示例
2007/04/09 Javascript
javascript十个最常用的自定义函数(中文版)
2009/09/07 Javascript
jquery 1.4.2发布!主要是性能与API
2010/02/25 Javascript
简介alert()与console.log()的不同
2015/08/26 Javascript
JavaScript子窗口调用父窗口变量和函数的方法
2015/10/09 Javascript
JavaScript获取IP获取的是IPV6 如何校验
2016/06/12 Javascript
手机端转换rem适应
2017/04/01 Javascript
详解angularjs popup-table 弹出框表格指令
2017/09/20 Javascript
浅谈js获取ModelAndView值的问题
2018/03/28 Javascript
JS 中可以提升幸福度的小技巧(可以识别更多另类写法)
2018/07/28 Javascript
Weex开发之WEEX-EROS开发踩坑(小结)
2019/10/16 Javascript
JavaScript中的执行环境和作用域链
2020/09/04 Javascript
详解微信小程序「渲染层网络层错误」的解决方法
2021/01/06 Javascript
对Python3 pyc 文件的使用详解
2019/02/16 Python
Python和Go语言的区别总结
2019/02/20 Python
使用Python OpenCV为CNN增加图像样本的实现
2019/06/10 Python
Python FFT合成波形的实例
2019/12/04 Python
python使用正则来处理各种匹配问题
2019/12/22 Python
Python递归及尾递归优化操作实例分析
2020/02/01 Python
keras做CNN的训练误差loss的下降操作
2020/06/22 Python
房产销售独家委托书范本
2014/10/01 职场文书
关于运动会广播稿200字
2014/10/08 职场文书
2014年企业党建工作总结
2014/12/18 职场文书
生死抉择观后感
2015/06/09 职场文书
奇妙的 CSS shapes(CSS图形)
2021/04/05 HTML / CSS
Shell脚本一键安装Nginx服务自定义Nginx版本
2022/03/20 Servers