使用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实现从百度API获取天气的方法
Mar 11 Python
Python中利用sqrt()方法进行平方根计算的教程
May 15 Python
apache部署python程序出现503错误的解决方法
Jul 24 Python
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
Nov 30 Python
Numpy中的mask的使用
Jul 21 Python
Django实现支付宝付款和微信支付的示例代码
Jul 25 Python
numpy中loadtxt 的用法详解
Aug 03 Python
Python3.5以上版本lxml导入etree报错的解决方案
Jun 26 Python
python中with语句结合上下文管理器操作详解
Dec 19 Python
Python版中国省市经纬度
Feb 11 Python
Django框架配置mysql数据库实现过程
Apr 22 Python
Python2与Python3关于字符串编码处理的差别总结
Sep 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
漫威DC御用漫画家去世 他的表情包曾走红网络
2020/04/09 欧美动漫
FirePHP 推荐一款PHP调试工具
2011/04/23 PHP
PHP读取ACCESS数据到MYSQL的代码
2011/05/11 PHP
php实现的SESSION类
2014/12/02 PHP
PHP实现过滤掉非汉字字符只保留中文字符
2015/06/04 PHP
利用switch语句进行多选一判断的实例代码
2016/11/14 PHP
javascript form 验证函数 弹出对话框形式
2009/06/23 Javascript
解析Javascript中难以理解的11个问题
2013/12/09 Javascript
jQuery中html()方法用法实例
2014/12/25 Javascript
基于JavaScript实现根据手机定位获取当前具体位置(X省X市X县X街道X号)
2015/12/29 Javascript
js使用i18n实现页面国际化的方法
2017/05/09 Javascript
一个可复用的vue分页组件
2017/05/15 Javascript
让bootstrap的carousel支持滑动滚屏的实现代码
2017/11/27 Javascript
用 Vue.js 递归组件实现可折叠的树形菜单(demo)
2017/12/25 Javascript
js 实现复选框只能选择一项的示例代码
2018/01/23 Javascript
vue 每次渲染完页面后div的滚动条保持在最底部的方法
2018/03/17 Javascript
Vue开发之封装分页组件与使用示例
2019/04/25 Javascript
ES6的解构赋值实例详解
2019/05/06 Javascript
vue 实现把路由单独分离出来
2020/08/13 Javascript
python监控网站运行异常并发送邮件的方法
2015/03/13 Python
python类继承与子类实例初始化用法分析
2015/04/17 Python
python定时器(Timer)用法简单实例
2015/06/04 Python
python列表操作之extend和append的区别实例分析
2015/07/28 Python
Python简单实现网页内容抓取功能示例
2018/06/07 Python
python框架中flask知识点总结
2018/08/17 Python
10款最好的Python开发编辑器
2019/07/03 Python
python多进程使用函数封装实例
2020/05/02 Python
使用HTML5的表单验证的简单示例
2015/09/09 HTML / CSS
一个J2EE项目团队的主要人员组成是什么
2012/06/04 面试题
老师对学生的寄语
2014/04/09 职场文书
作风建设演讲稿
2014/05/23 职场文书
2014年平安建设工作总结
2014/11/19 职场文书
中秋节慰问信
2015/02/15 职场文书
如何判断pytorch是否支持GPU加速
2021/06/01 Python
JavaScript实现栈结构详细过程
2021/12/06 Javascript
详解Python如何批量采集京东商品数据流程
2022/01/22 Python