由于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 numba讲解相关推荐

  1. python numba_Python Numba jit NotImplementedError列表理解

    我想加快用Numba执行列表理解的公式的计算. from numba import jit # General function to generate overlapping windows fro ...

  2. python 加速器 numba 示例

    python 加速器 numba 示例 官方文档 http://numba.pydata.org/numba-doc/latest/user/index.html 示例代码 # pip install ...

  3. python爬虫进阶案例,Python进阶(二十)-Python爬虫实例讲解

    #Python进阶(二十)-Python爬虫实例讲解 本篇博文主要讲解Python爬虫实例,重点包括爬虫技术架构,组成爬虫的关键模块:URL管理器.HTML下载器和HTML解析器. ##爬虫简单架构 ...

  4. 2023年美赛C题Wordle预测问题一建模及Python代码详细讲解

    相关链接 (1)2023年美赛C题Wordle预测问题一建模及Python代码详细讲解 (2)2023年美赛C题Wordle预测问题二建模及Python代码详细讲解 (3)2023年美赛C题Wordl ...

  5. 2023年美赛C题Wordle预测问题三、四建模及Python代码详细讲解

    更新时间:2023-2-19 16:30 相关链接 (1)2023年美赛C题Wordle预测问题一建模及Python代码详细讲解 (2)2023年美赛C题Wordle预测问题二建模及Python代码详 ...

  6. 2023年美赛C题Wordle预测问题二建模及Python代码详细讲解

    更新时间:2023-2-19 相关链接 (1)2023年美赛C题Wordle预测问题一建模及Python代码详细讲解 (2)2023年美赛C题Wordle预测问题二建模及Python代码详细讲解 (3 ...

  7. 「Python爬虫系列讲解」七、基于数据库存储的 BeautifulSoup 招聘爬取

    本专栏是以杨秀璋老师爬虫著作<Python网络数据爬取及分析「从入门到精通」>为主线.个人学习理解为主要内容,以学习笔记形式编写的. 本专栏不光是自己的一个学习分享,也希望能给您普及一些关 ...

  8. 「Python爬虫系列讲解」八、Selenium 技术

    本专栏是以杨秀璋老师爬虫著作<Python网络数据爬取及分析「从入门到精通」>为主线.个人学习理解为主要内容,以学习笔记形式编写的. 本专栏不光是自己的一个学习分享,也希望能给您普及一些关 ...

  9. 「Python爬虫系列讲解」十二、基于图片爬取的 Selenium 爬虫

    本专栏是以杨秀璋老师爬虫著作<Python网络数据爬取及分析「从入门到精通」>为主线.个人学习理解为主要内容,以学习笔记形式编写的. 本专栏不光是自己的一个学习分享,也希望能给您普及一些关 ...

最新文章

  1. opencms常用标签
  2. 你必须非常努力,才可以看起来毫不费力。
  3. Indesign CS6怎么添加框线_InDesign小小知识库
  4. List中subList方法抛出异常java.util.ConcurrentModificationException原理分析
  5. python image 转成字节_就是这么流弊!三行Python代码,让数据处理速度提高2到6倍
  6. 青蛙跳台阶问题暨斐波那契数列
  7. win7和xp,哪个才是你的选择?
  8. 蓝桥杯C语言---基础练习
  9. 微信小程序新手向——界面布局
  10. Navicat自动运行批处理作业并发送附件邮件
  11. pcloudy移动应用测试平台,以实现无限规模
  12. 数组的常用算法(1)--由“为了集齐108将买多少袋干脆面”展开去
  13. 最全CSS基础知识图片形式整理
  14. Bootstrap模板-Minimal.2.1.1
  15. android开发多国语言对照表
  16. 集合类框架的常用类比
  17. 大学计算机编程考试用什么软件?
  18. No module named ensurepip
  19. 携程推荐系统架构学习
  20. 使用Excel2013制作甘特图

热门文章

  1. Android系统构建
  2. 2021年塔式起重机司机复审考试及塔式起重机司机模拟考试题库
  3. 信息安全关键领域国产替代提速 概念股价值解析
  4. pandas读取Excel表格(read_excel)
  5. Altium Designer输出gerber等生产文件
  6. sharepoint 2010 默认弹出模式窗口最大化default showModalDialog maximize
  7. 小学生python游戏编程arcade----基本知识3
  8. 2021-05-27keil中.h文件的建立
  9. canvas生成图片toDataURL报错(Uncaught DOMException: Failed to execute ‘toDataURL‘ on ‘HTMLCanvasEl)
  10. 【MAPBOX基础功能】23、mapbox通过marker的方式绘制波纹点位