python numba讲解
由于python有动态解释性语言的特性,跑起代码来相比java、c++要慢很多,尤其在做科学计算的时候,十亿百亿级别的运算,让python的这种劣势更加凸显。
因此就出现了解决python慢的一大利器numba,可以让python的运行速度提升上百倍甚至更多!
numpy是为面向numpy数组的计算任务而设计的。
Numba把NumPy数组类型生成高效的编译代码,用于在GPU或多核CPU上执行。
在做大量科学计算时和使用for循环数据较多时,尽量使用numba。
一:什么是numba
numba是一款可以将python函数编译为机器代码的JIT编译器,经过numba编译的python代码(仅限数组运算),其运行速度可以接近C或FORTRAN语言。
numba的作用是给python换一种编译器。让代码直接转成机器码运行。
二:如何使用numba
使用numba非常简单,只需要将numba装饰器应用到python函数中,无需改动原本的python代码,numba会自动完成剩余的工作。那么怎么使用呢,下面有一个例子。
1.计算numpy数组各个数值的双曲正切值。
(1)导入numpy、numba及其编译器
import numpy as np
import numba
from numba import jit
(2)传入numba装饰器jit,编写函数
# nopython = True 选项要求完全编译该函数(以便完全删除Python解释器调用),否则会引发异常
@jit(nopython=True) # jit,numba装饰器中的一种
def go_fast2(a): # 首次调用时,函数被编译为机器代码
trace = 0
# 假设输入变量是numpy数组
for i in range(a.shape[0]): # Numba 擅长处理循环
trace += np.tanh(a[i, i]) # numba喜欢numpy函数
return a + trace # numba喜欢numpy广播
(3)给函数传递实参
# 因为函数要求传入的参数是nunpy数组
x = np.arange(100).reshape(10, 10)
# 执行函数
go_fast(x)
(4)经numba加速的函数执行时间
% timeit go_fast(x)
(5)结果输出
3.63 µs ± 156 ns #加速后
136 µs ± 1.09 µs #不加速
快了40倍。
2.nunba对for循环的加速
(1)代码
# 普通函数
def go_fast1(): # 首次调用时,函数被编译为机器代码
x = 0
for i in np.arange(5000):
x += i
return x
# nopython = True选项要求完全编译该函数(以便完全删除Python解释器调用),否则会引发异常
@jit(nopython=True) # jit,numba装饰器中的一种
def go_fast2(): # 首次调用时,函数被编译为机器代码
x = 0
for i in np.arange(5000):
x += i
return x
(2)结果输出
1.57 µs ± 53.8 ns #加速后
408 µs ± 9.73 µs #不加速
快了200倍。
numba对python代码运行速度有巨大的提升,这极大的促进了大数据时代的python数据分析能力,但不会对numpy和for循环以外的python代码有很大帮助,对数据科学工作者来说,这真是一个好技术!
python numba讲解的更多相关文章
- Python 单例模式讲解
Python 单例模式讲解 本节内容: classmethod用途 单例模式方法一 类__new__方法讲解 单例模式方法二 前言: 使用单例方法的好处:对于一个类,多次实例化会产生多个对象,若使用单 ...
- 用python语言讲解数据结构与算法
写在前面的话:关于数据结构与算法讲解的书籍很多,但是用python语言去实现的不是很多,最近有幸看到一本这样的书籍,由Brad Miller and David Ranum编写的<Problem ...
- Python函数讲解
Python函数
- 基于数据形式说明杜兰特的技术特点的分析(含Python实现讲解部分)
---恢复内容开始--- 注: 本博文系原创,转载请标明原处. 题外话:春节过后,回到学校无所事事,感觉整个人都生锈一般,没什么动力,姑且称为"春节后遗症".在科赛官网得到关于NB ...
- Python实例讲解 -- wxpython 基本的控件 (按钮)
使用按钮工作 在wxPython 中有很多不同类型的按钮.这一节,我们将讨论文本按钮.位图按钮.开关按钮(toggle buttons )和通用(generic )按钮. 如何生成一个按钮? 在第一部 ...
- Python实例讲解 -- 获取本地时间日期(日期计算)
1. 显示当前日期: print time.strftime('%Y-%m-%d %A %X %Z',time.localtime(time.time())) 或者 你也可以用: print list ...
- python基础讲解部分&纯小白需要扎实基础
第一章知识点 一.Python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum),在中国人称龟叔 Python崇尚优美.清晰.简单 应用领域: (1)云计算,写 ...
- python通俗讲解闭包
通俗理解闭包 先来看看什么是闭包吧 闭包是引用了自由变量的函数.这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外.所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合 ...
- Python框架、库以及软件资源汇总
转自:http://developer.51cto.com/art/201507/483510.htm 很多来自世界各地的程序员不求回报的写代码为别人造轮子.贡献代码.开发框架.开放源代码使得分散在世 ...
随机推荐
- Javase之集合体系之(1)集合顶层类Collection与其迭代器知识
集合体系之集合顶层类Collection与其迭代器知识 集合的由来:Java是一门面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,就必须把多个对象进行存储,而要存 ...
- 查找发布地图的 REST URL并查询相关信息
1.登录ArcGIS Server Manager 2.登录后,里面是以前自己发布的地图服务 3.点击自己发布的地图,然后按下功能选项,再点击箭头来找到URL 4.点击进去,分别能从红圈中找到相关的信 ...
- Discuz! 全局变量说明
$_G 保存了 Discuz! 中所有的预处理数据 缓存能够很好的提高程序的性能,一些配置数据没必要每次都查询数据库,只要在修改了的时候更新下缓存即可. Discuz! 中所有的缓存保存在 $_G[c ...
- [20190522]DISABLE TABLE LOCK.txt
[20190522]DISABLE TABLE LOCK.txt --//如果禁止table lock时,一些ddl操作会被禁止.但是我有点吃惊的是增加字段不受限制.--//通过测试说明问题. 1.环 ...
- Mysql双主加Keepalived+读写分离
一.MySQL于keepalived简介** 前言: 在企业中,数据库高可用一直是企业的重中之重,中小企业很多都是使用mysql主从方案,一主多从,读写分离等,但是单主存在单点故障,从库切换成主库需要 ...
- Div转为Canvas简直不要太好玩~~~
html2canvas库 今天发现了一个神奇的玩意,简直不要太好玩~~ 用canvas做动画是很难,但是div能比canvas简单不少,只是因为canvas中不能操作Dom元素 这款神器,可以直接将D ...
- 5. git-lab 项目操作
项目操作 一.给成员授权项目权限 之前我们是给组增加成员. 当有的项目需要给组下面的成员授权不一样的时候. 我们需要在项目里面给成员授权权限 点击管理区域 点这个项目 看下图,我们可以看到 现在这 ...
- Tomcat相关目录及配置文件
目录结构 [root@localhost tomcat]# tree -L 1.├── bin├── BUILDING.txt├── conf├── CONTRIBUTING.md├── lib├── ...
- zabbix使用钉钉告警
1.钉钉创建群 2.[root@localhost ~]# vim /etc/zabbix/zabbix_server.conf # 配置文件中查找”Alert”查看告警脚本存放路径 [root@lo ...
- 剑指Offer-18.二叉树的镜像(C++/Java)
题目: 题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ ...