使用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中bisect的用法
Sep 23 Python
Python中的zipfile模块使用详解
Jun 25 Python
Mac中Python 3环境下安装scrapy的方法教程
Oct 26 Python
Python时间戳使用和相互转换详解
Dec 11 Python
python对离散变量的one-hot编码方法
Jul 11 Python
解决PyCharm不运行脚本,而是运行单元测试的问题
Jan 17 Python
详解Python3 基本数据类型
Apr 19 Python
python射线法判断一个点在图形区域内外
Jun 28 Python
Python3 使用selenium插件爬取苏宁商家联系电话
Dec 23 Python
Python内置函数locals和globals对比
Apr 28 Python
Scrapy基于scrapy_redis实现分布式爬虫部署的示例
Sep 29 Python
Python爬虫后获取重定向url的两种方法
Jan 19 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 zip扩展Linux下安装过程分享
2014/05/05 PHP
浅谈PHP无限极分类原理
2019/03/14 PHP
ExtJS 工具栏 分页事件参数
2010/03/05 Javascript
文本框(input)获取焦点(onfocus)时样式改变的示例代码
2014/01/10 Javascript
js淡入淡出的图片轮播效果代码分享
2015/08/24 Javascript
跟我学习javascript的全局变量
2015/11/16 Javascript
JavaScript编写页面半透明遮罩效果的简单示例
2016/05/09 Javascript
Bootstrap3.0建站教程(一)之bootstrap表单元素排版
2016/06/01 Javascript
HTML页面,测试JS对C函数的调用简单实例
2016/08/09 Javascript
JavaScript对象封装的简单实现方法(3种方法)
2017/01/03 Javascript
Vue-cli项目获取本地json文件数据的实例
2018/03/07 Javascript
vue项目中将element-ui table表格写成组件的实现代码
2019/06/12 Javascript
[00:59]DOTA2荣耀之路1:Doom is back!weapon X!
2018/05/22 DOTA
Python random模块(获取随机数)常用方法和使用例子
2014/05/13 Python
python网络编程学习笔记(六):Web客户端访问
2014/06/09 Python
python中Pycharm 输出中文或打印中文乱码现象的解决办法
2017/06/16 Python
解决python文件字符串转列表时遇到空行的问题
2017/07/09 Python
Python排序搜索基本算法之选择排序实例分析
2017/12/09 Python
Python安装lz4-0.10.1遇到的坑
2018/05/20 Python
基于Django框架利用Ajax实现点赞功能实例代码
2018/08/19 Python
Pandas过滤dataframe中包含特定字符串的数据方法
2018/11/07 Python
Python实现连接MySql数据库及增删改查操作详解
2019/04/16 Python
Python 生成一个从0到n个数字的列表4种方法小结
2019/11/28 Python
Python 模拟动态产生字母验证码图片功能
2019/12/24 Python
pytorch 准备、训练和测试自己的图片数据的方法
2020/01/10 Python
python 发送邮件的示例代码(Python2/3都可以直接使用)
2020/12/03 Python
欧洲顶级的童装奢侈品购物网站:Bambini Fashion(面向全球)
2018/04/24 全球购物
JD Sports澳洲官网:英国领先的运动鞋和运动时尚零售商
2020/02/15 全球购物
Can a struct inherit from another class? (结构体能继承类吗)
2014/07/22 面试题
生产班组长岗位职责
2014/01/05 职场文书
出生医学证明样本
2014/01/17 职场文书
政府信息公开实施方案
2014/05/09 职场文书
实现中国梦思想汇报2014
2014/09/13 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
2015年秋季灭鼠工作总结
2015/07/27 职场文书
Django如何与Ajax交互
2021/04/29 Python