iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >利用numba让python速度提升百倍
  • 849
分享到

利用numba让python速度提升百倍

2024-04-02 19:04:59 849人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录一、什么是numba?二、numba适合科学计算三、学习使用numba四、numba让python飞起来前言; Python由于它动态解释性语言的特性,跑起代码来相比java、c

前言;

Python由于它动态解释性语言的特性,跑起代码来相比java、c++要慢很多,尤其在做科学计算的时候,十亿百亿级别的运算,让python的这种劣势更加凸显。

办法永远比困难多,numba就是解决python慢的一大利器,可以让python的运行速度提升上百倍!

一、什么是numba?

numba是一款可以将python函数编译为机器代码的JIT编译器,经过numba编译的python代码(仅限数组运算),其运行速度可以接近C或FORTRAN语言。

python之所以慢,是因为它是靠CPython编译的,numba的作用是给python换一种编译器。

python、c、numba三种编译器速度对比:

使用numba非常简单,只需要将numba装饰器应用到python函数中,无需改动原本的python代码,numba会自动完成剩余的工作。

import numpy as np
import numba
from numba import jit

@jit(nopython=True) # jit,numba装饰器中的一种
def Go_fast(a): # 首次调用时,函数被编译为机器代码
    trace = 0
    # 假设输入变量是numpy数组
    for i in range(a.shape[0]):   # Numba 擅长处理循环
        trace += np.tanh(a[i, i]) 
    return a + trace

以上代码是一个python函数,用以计算numpy数组各个数值的双曲正切值,我们使用了numba装饰器,它将这个python函数编译为等效的机器代码,可以大大减少运行时间。

二、numba适合科学计算

numpy是为面向numpy数组的计算任务而设计的。

在面向数组的计算任务中,数据并行性对于像GPU这样的加速器是很自然的。Numba了解NumPy数组类型,并使用它们生成高效的编译代码,用于在GPU或多核CPU上执行。特殊装饰器还可以创建函数,像numpy函数那样在numpy数组上广播。

什么情况下使用numba呢?

  • 使用numpy数组做大量科学计算时
  • 使用for循环时

三、学习使用numba

第一步:导入numpy、numba及其编译器

import numpy as np
import numba 
from numba import jit

第二步:传入numba装饰器jit,编写函数

# 传入jit,numba装饰器中的一种
@jit(nopython=True) 
def go_fast(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广播

nopython = True选项要求完全编译该函数(以便完全删除Python解释器调用),否则会引发异常。这些异常通常表示函数中需要修改的位置,以实现优于Python的性能。强烈建议您始终使用nopython = True。

第三步:给函数传递实参

# 因为函数要求传入的参数是nunpy数组
x = np.arange(100).reshape(10, 10) 
# 执行函数
go_fast(x)

第四步:经numba加速的函数执行时间

% timeit go_fast(x)

输出:

3.63 µs ± 156 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

第五步:不经numba加速的函数执行时间

def go_fast(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广播

x = np.arange(100).reshape(10, 10) 
%timeit go_fast(x)

输出:

136 µs ± 1.09 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

结论:

在numba加速下,代码执行时间为3.63微秒/循环。不经过numba加速,代码执行时间为136微秒/循环,两者相比,前者快了40倍。

四、numba让python飞起来

前面已经对比了numba使用前后,python代码速度提升了40倍,但这还不是最快的。

这次,我们不使用numpy数组,仅用for循环,看看nunba对for循环到底有多钟爱!

# 不使用numba的情况
def t():
    x = 0
    for i in np.arange(5000):
        x += i
    return x
%timeit(t())

输出:

408 µs ± 9.73 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

# 使用numba的情况
@jit(nopython=True) 
def t():
    x = 0
    for i in np.arange(5000):
        x += i
    return x
%timeit(t()) 

输出:

1.57 µs ± 53.8 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

使用numba前后分别是408微秒/循环、1.57微秒/循环,速度整整提升了200多倍!

结语:

numba对python代码运行速度有巨大的提升,这极大的促进了大数据时代的python数据分析能力,对数据科学工作者来说,这真是一个lucky tool !

当然numba不会对numpy和for循环以外的python代码有很大帮助,你不要指望numba可以帮你加快从数据库取数,这点它真的做不到哈。

到此这篇关于利用numba让python速度提升百倍的文章就介绍到这了,更多相关python速度提升numba内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 利用numba让python速度提升百倍

本文链接: https://www.lsjlt.com/news/140871.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 利用numba让python速度提升百倍
    目录一、什么是numba?二、numba适合科学计算三、学习使用numba四、numba让python飞起来前言; python由于它动态解释性语言的特性,跑起代码来相比java、c...
    99+
    2024-04-02
  • CSS怎么让页面渲染速度提升数倍
    本篇内容介绍了“CSS怎么让页面渲染速度提升数倍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!浏览器在接收到服务端返回的 HTML 之后,需...
    99+
    2023-06-27
  • 怎么让Python运行速度提高100倍
    这篇文章主要介绍“怎么让Python运行速度提高100倍”,在日常操作中,相信很多人在怎么让Python运行速度提高100倍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么让Python运行速度提高100倍...
    99+
    2023-06-17
  • 数据库加速魔法:让数据库处理速度提升一倍
    ...
    99+
    2024-04-02
  • 怎么让python处理速度翻倍
    本篇内容主要讲解“怎么让python处理速度翻倍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么让python处理速度翻倍”吧!进程在面试的时候,我们都会记住一个概念,进程是系统资源分配的最小...
    99+
    2023-06-02
  • 你知道吗?Python numpy可以让LeetCode算法题的响应速度提升数倍!
    Python是一种高级编程语言,而numpy是Python的一个重要的科学计算库,它能够有效地处理大量的数学计算。在算法领域,Python numpy的使用可以大大提升算法的响应速度,尤其是在LeetCode算法题中,Python nump...
    99+
    2023-06-05
    numpy 响应 leetcode
  • 只用3行代码,让Python提速4倍!最
    Python是一门非常适合处理数据和自动化完成重复性工作的编程语言。我们在用数据训练机器学习模型之前,通常都需要对数据进行预处理,而Python就非常适合完成这项工作,比如需要重新调整几十万张图像的尺寸,用Python没问题!你几乎总是能找...
    99+
    2023-01-31
    代码 Python
  • 利用Numba与Cython结合提升python运行效率详解
    目录NumbaNumba模式什么是LLVM?Numba的优势:Numba的劣势:CythonCython的优势:Cython的劣势:Numba对CythonNumba Numba是一...
    99+
    2024-04-02
  • 能让Python提速超40倍的神器Cython详解
    让Python提速超过40倍的神器:Cython 人工智能最火的语言,自然是被誉为迄今为止最容易使用的代码之一的Python。Python代码素来以直观、高可读性著称。 然而,易用的...
    99+
    2024-04-02
  • 只需要这一行代码就能让python计算速度提高十倍
    目录一、前言二、Python的JIT编译器三、Numba快速学习四、关于使用五、实验提升一、前言 Python语言近年来人气爆棚。它广泛应用于数据科学,人工智能,以及网络安全问题中,...
    99+
    2024-04-02
  • 利用百度百科提升自己网站权重排名分析的方法
    这篇文章主要讲解了“利用百度百科提升自己网站权重排名分析的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“利用百度百科提升自己网站权重排名分析的方法”吧!  一:先把自己的百科账户养好。 ...
    99+
    2023-06-10
  • 利用JuiceFS使MySQL 备份验证性能提升 10 倍
    目录数据准备使用默认参数增大XtraBackup的内存缓冲区增大XtraBackup读线程数JuiceFS启用异步写增大JuiceFS的磁盘缓存增大数据库数据量总结前言: Juice...
    99+
    2024-04-02
  • 怎么提升python代码的运行速度
    这篇文章给大家介绍怎么提升python代码的运行速度,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其最初的设计是用于编写...
    99+
    2023-06-14
  • python 利用百度API进行淘宝评论关键词提取
    目录1、创建相关新应用2、获取Access Token3、分析评论并进行观点抽取4、运行结果利用百度API自然语言处理技术中的评论观点抽取方面,对淘宝购物的评论进行分析,把关键词进行...
    99+
    2024-04-02
  • 使用Composing builds提升Android编译速度
    目录前言Composing builds 和 buildSrc 对比什么是 buildSrc什么是 Composing buildsbuildSrc vs Composing bui...
    99+
    2024-04-02
  • 提升Python运行速度的5个小技巧
    目录1. 选择合适的数据结构2. 善用强大的内置函数和第三方库3. 少用循环4. 避免循环重复计算5. 少用内存、少用全局变量总结 官方原文,代码均可运行 Python 是世界上使用...
    99+
    2024-04-02
  • 阿里云加速服务器下载:提升网站速度的利器
    简介 阿里云加速服务器下载是阿里云提供的一项服务,旨在帮助用户提升网站的访问速度。通过使用阿里云加速服务器下载,用户可以将网站的静态资源(如图片、CSS、JavaScript等)缓存到阿里云的全球分布式节点上,从而减少用户的加载时间,提升用...
    99+
    2024-01-30
    阿里 利器 速度
  • [segment-anything]使用onnxruntime部署sam模型,速度提高30倍!
    准备工作 一台带有英伟达显卡的电脑 2、anaconda环境 3、CUDA以及cudnn 前言 最近sam火遍了cv圈,号称可用一个模型分割一切,本文使用sam导出onnx模型,并通过onnxrunt...
    99+
    2023-09-05
    python 人工智能 计算机视觉
  • mysql/oracle 数据库delete操作太慢(where ... in ...),不加索引,一招让性能提升百倍
    背景 delete操作应用虽然不多,但是有些场景使用起来还是更方便。比如 在数仓项目中,软删虽然更快更安全,但是缺点也很多: 1、软删造成数据冗余,甚至快速膨胀的后果。比如一些中间表,只是作为中转站,过两天数据就分配其他表了,不硬...
    99+
    2023-08-17
    数据库 mysql oracle sql 大数据
  • Golang中如何利用非阻塞IO提升高并发响应速度?
    问题: 如何在 go 中利用非阻塞 i/o 提升响应速度?答案:非阻塞 i/o 允许 goroutine 在 i/o 操作完成之前继续执行其他任务。通过使用 net.dialer 和 n...
    99+
    2024-05-11
    golang 非阻塞io
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作