使用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实现mysql的读写分离及负载均衡
Feb 04 Python
解决Django数据库makemigrations有变化但是migrate时未变动问题
May 30 Python
Python实现基于KNN算法的笔迹识别功能详解
Jul 09 Python
10 行 Python 代码教你自动发送短信(不想回复工作邮件妙招)
Oct 11 Python
python字典嵌套字典的情况下找到某个key的value详解
Jul 10 Python
Python PyPDF2模块安装使用解析
Jan 19 Python
详解python itertools功能
Feb 07 Python
Python将二维列表list的数据输出(TXT,Excel)
Apr 23 Python
python实现126邮箱发送邮件
May 20 Python
Python实现封装打包自己写的代码,被python import
Jul 12 Python
Python移位密码、仿射变换解密实例代码
Jun 27 Python
Python 键盘事件详解
Nov 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
php新建文件自动编号的思路与实现
2011/06/27 PHP
php邮箱地址正则表达式验证
2015/11/13 PHP
PHP创建单例后台进程的方法示例
2017/05/23 PHP
PHP针对伪静态的注入总结【附asp与Python相关代码】
2017/08/01 PHP
基础的prototype.js常用函数及其用法
2007/03/10 Javascript
JS基础之undefined与null的区别分析
2011/08/08 Javascript
JQuery的AJAX实现文件下载的小例子
2013/05/15 Javascript
Javascript 修改String 对象 增加去除空格功能(示例代码)
2013/11/30 Javascript
实例讲解JS中数组Array的操作方法
2014/05/09 Javascript
node.js应用后台守护进程管理器Forever安装和使用实例
2014/06/01 Javascript
javascript数组输出的两种方式
2015/01/13 Javascript
js中的关联数组与普通数组详解
2016/07/27 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
通过js修改input、select默认字体颜色
2017/04/19 Javascript
Vue学习笔记进阶篇之单元素过度
2017/07/19 Javascript
JS实现预加载视频音频/视频获取截图(返回canvas截图)
2017/10/09 Javascript
利用three.js画一个3D立体的正方体示例代码
2017/11/19 Javascript
Angular整合zTree的示例代码
2018/01/24 Javascript
使用typescript开发angular模块并发布npm包
2018/04/19 Javascript
vue.js数据绑定操作详解
2018/04/23 Javascript
浅谈React 服务器端渲染的使用
2018/05/08 Javascript
不得不知的ES6小技巧
2018/07/28 Javascript
微信小程序工具函数封装
2019/10/28 Javascript
[05:26]2014DOTA2西雅图国际邀请赛 iG战队巡礼
2014/07/07 DOTA
详解python时间模块中的datetime模块
2016/01/13 Python
12步教你理解Python装饰器
2016/02/25 Python
Django中自定义查询对象的具体使用
2019/10/13 Python
Python pygame绘制文字制作滚动文字过程解析
2019/12/12 Python
python适合做数据挖掘吗
2020/06/16 Python
html5配合css3实现带提示文字的输入框(摆脱js)
2013/03/08 HTML / CSS
迪卡侬英国官网:Decathlon英国
2017/04/08 全球购物
全球酒店比价网:HotelsCombined
2017/06/20 全球购物
梅西百货官网:Macy’s
2020/08/04 全球购物
食品厂厂长岗位职责
2014/01/30 职场文书
导游词之澳门妈祖庙
2019/12/19 职场文书
thinkphp 获取控制器及控制器方法
2021/04/16 PHP