一行代码实现Python运行性能增强百倍,性能发动机numba模块介绍

Python 提速大杀器之 numba 篇 你是不是曾经有这样的苦恼,python 真的太好用了,但是它真的好慢啊(哭死) ; C++ 很快,但是真的好难写啊,此生能不碰它就不碰它。老天啊,有没有什么两全其美的办法呢?俗话说的好:办法总是比困难多,大家都有这个问题,自然也就有大佬来试着解决这个问题,这就请出我们今天的主角:numba 每次一个Python小技巧! 不过在介绍 numba 之前,我们还是得来看看 python 为什么这么慢: 为什么 python 这么慢 用过 python 的人都知道, 尤其是在有循环的情况下,pytho. 阅读详情

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

办法永远比困难多,numba就是解决python慢的一大利器,可以让python的运行速度提升上百倍!在这里插入图片描述

什么是numba?

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

python之所以慢,是因为它是靠CPython编译的,numba的作用是给python换一种编译器。在这里插入图片描述
使用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代码 Numba是一款可以将python函数编译为机器代码的JIT编译器,经过Numba编译的python代码(仅限数组运算),其运行速度可以接近C或FORTRAN语言。普通python语言靠Cython编译的,但是Numba使用Jit编译器可以直接将一个函数转化为机器码。JIT的全称是 Just-in-time,在 numba 里面则特指 Just-in-time compilation(即时编译动态编译(dynamic compilation):指的是“在运行时进行编译”; 阅读详情

相关推荐

应用-使用Numba加速Python计算:2行代码,13倍加速

当你能找到NumPy或SciPy函数来实现你想要的功能时,问题就解决了。但如果不存在呢?这时,如果你想要快速的结果,另一个选择是直接编写低级代码,但这意味着你需要切换到不同的编程语言,构建系统更复杂,整体上也更复杂。在普通Python中运行相同的代码,并在解释器运行时中运行更快的编译版本。轻松快速地迭代算法。Numba解析代码,然后根据输入即时编译。例如,根据输入是u64数组还是浮点数数组,你会得到不同版本的代码。Numba还可以针对CPU以外的运行时;例如,你可以在GPU上运行代码。

liluo0815481的博客 1054

python运行加速神器——numba(详细教学版)

如果代码中有循环,耗时恼人,一定要用Numba试试。

weixin_45977690的博客 2万+

CuPy完整指南:用GPU加速Python科学计算,性能提升百倍

在数据科学、机器学习和科学计算领域,处理大规模数组运算时,CPU的计算能力常常成为瓶颈。当你的NumPy代码处理百万甚至十亿级别的数据点时,即使优化了算法,等待时间依然漫长。如果你手头恰好有一块性能强劲的NVIDIA或AMD GPU,却苦于无法用熟悉的Python语法直接调用其算力,那么CuPy就是你一直在寻找的解决方案。本文将为你提供一份从零开始,涵盖概念理解、环境搭建、核心语法到实战项目的CuPy完整指南。无论你是刚接触GPU加速的Python开发者,还是希望将现有NumPy/SciPy项目性能提升一个

weixin_30245867的博客 412

python可以提高程序执行速度N倍你知道吗?

1.1。Numba的约5分钟指南 Numba是Python的即时编译器,它最适用于使用NumPy数组和函数以及循环的代码。使用Numba的最常用方法是通过其装饰器集合,可以应用于您的函数来指示Numba编译它们。当调用Numba修饰函数时,它被编译为机器代码“及时”执行,并且您的全部或部分代码随后可以以本机机器代码速度运行! 开箱即用的Numba使用以下方法: 操作系统:Windows(...

weixin_30367169的博客 957

TEA系列加密算法实战:从C到Python的跨平台轻量级实现

分组加密是保障数据机密性的基础技术,其核心原理是通过特定算法和密钥对固定长度的数据块进行变换。TEA(微型加密算法)以其极简的Feistel网络结构和仅使用加法、异或、移位的轮函数设计,在资源受限环境中展现出独特的技术价值。它特别适用于物联网终端、嵌入式设备和老旧系统升级等对内存与算力有苛刻要求的应用场景。本文通过对比C语言与Python的实现差异,深入探讨了如何模拟无符号32位整数运算、处理字节序以及构建跨平台命令行工具,为理解轻量级加密算法和跨平台编程提供了工程实践参考。

weixin_27199085的博客 318

用Python分形算法制作节日贺卡:从曼德博集到圣诞主题艺术

分形是数学与计算机图形学中的重要概念,它通过简单规则的迭代生成无限复杂、自相似的图案,体现了确定性系统中的混沌之美。这一原理在数字艺术、数据可视化和创意编程中具有广泛的技术价值,能够创造出独特且可复现的视觉形态。在应用场景上,分形算法常被用于生成自然景观模拟、纹理设计以及艺术创作。本文以节日贺卡制作为例,具体展示了如何利用NumPy进行高效向量化计算,并通过Matplotlib实现平滑着色,将曼德博集渲染成具有圣诞主题色彩的艺术图像,为个性化祝福提供了技术实现方案。

weixin_34378767的博客 373

Boltz-2 亲和力预测实战手册:10 分钟跑通首次预测,从调参到结果验证

用对接软件逐个筛一百万个化合物,算力集群要跑数周;而 Boltz-2 让每个分子几分钟内直接给出"结不结合、结合多紧"两个答案。Boltz-2 是开源的蛋白质-配体结合亲和力预测工具,单张消费级 GPU 即可运行,药物研发人员和计算化学新手都能上手。 ## 🚀 跑起来:10 分钟完成首次亲和力预测 ### 📦 环境准备:一条命令安装,单卡 GPU 即可 建议在一个干净的虚拟环境里安装。官

gitblog_00723的博客 714

FFT实战:用Python手把手教你实现音频频谱分析(附完整代码)

本文通过Python实战教程,详细讲解了如何利用快速傅立叶变换(FFT)进行音频频谱分析。从基础理论、环境搭建到本地音频文件处理和实时频谱可视化,提供了完整的代码实现。文章还涵盖了音频特征提取、性能优化等高级应用,帮助开发者掌握从时域到频域的信号处理核心技术。

weixin_29278805的博客 621

Python3.9高性能计算实战:Numba加速部署优化教程

本文介绍了如何在星图GPU平台上自动化部署Python3.9镜像,以快速搭建高性能计算开发环境。通过该环境,开发者可便捷地使用Numba即时编译器,将Python数值计算函数编译为高效机器码,从而显著加速科学计算、数据分析等场景中的复杂循环与矩阵运算。

weixin_35734408的博客 834

Python手搓SM4国密算法:从原理到CBC模式实现与优化

对称加密是保障数据机密性的核心技术,其原理在于使用同一密钥进行加密和解密,确保信息在传输或存储过程中的私密性。分组密码作为对称加密的主流实现方式,通过将数据划分为固定长度的块进行处理,结合非线性变换和密钥扩展算法,实现高强度的混淆与扩散,从而抵抗密码分析。这种技术对于金融交易、物联网通信等需要满足特定行业规范(如国密标准)的场景具有重要价值。本文聚焦于国密算法SM4,深入剖析其非平衡Feistel网络结构、S盒非线性变换及轮函数设计,并通过Python代码完整实现了从ECB到更安全的CBC工作模式,探讨了密

weixin_30730053的博客 369

免费AI视频生成全流程:通义千问+Seedance 2.5+Grok实战指南

AI视频生成正在成为内容创作的重要方式,但高昂的API费用常让个人创作者望而却步。实际上,通过合理组合云端免费工具,也能搭建一条完整的视频生产链路:利用大模型生成脚本,用视频生成模型将文本渲染成画面,再借助多模态模型进行一致性校验。这种“文本+视频+多模态”的协作模式,将复杂的生成任务解耦为可独立调用的模块,既降低了本地硬件要求,也为批量内容验证提供了低成本方案。该流程适用于短视频素材快速产出、产品Demo验证以及AI应用集成等场景,核心在于打通免费账号、API调用与批量任务调度。本文以通义千问、Seeda

weixin_29044157的博客 386

Python高级开发(二十三):系统编程之JIT编译与C扩展

在本文中我们将深入探讨两种将Python性能推向极致的高级技术:JIT(即时编译)和C扩展。我们将首先学习如何使用Numba库,通过一个简单的@jit装饰器,就能奇迹般地将计算密集型的Python函数(特别是涉及NumPy和循环的)编译成速度堪比C语言的机器码。接着,我们将介绍Cython,它不仅可以将现有的Python代码编译为C,还允许我们使用一种混合了Python和C语法的语言来编写扩展模块,实现对性能的精细化控制。

专注于网络安全攻防技术与安全运营(SecOps)实践。 754

HyperLedger Fabric实战(一):基础环境构建

简介 本文将介绍从一台裸机上面如何构建出一个可用的Fabric网络(单机版,非测试网络)。 基础环境构建 Fabric组件安装

yindarui 1万+

Python GPU加速利器CuPy:无缝替换NumPy,性能提升百倍

在数据科学和高性能计算领域,GPU加速已成为提升计算效率的关键技术。其原理是通过并行处理架构,将大规模数据计算任务分配给数千个核心同时执行,从而突破CPU串行计算的性能瓶颈。这一技术价值在于能够显著缩短科学计算、深度学习训练和推理的时间成本,广泛应用于大规模矩阵运算、图像处理和数值模拟等场景。CuPy作为NumPy的GPU实现,提供了几乎一致的API接口,让开发者无需重写CUDA代码即可实现计算任务的GPU加速,特别适合处理大规模数组运算和深度学习数据预处理等计算密集型任务。

android_mylove的专栏 392

Win10 有线网卡配置静态IP后,出现两个IPv4地址的解决方法

在我使用有线网络连接局域网时,配置了静态IP之后,发现网络并没有通,检查之后发现“以太网状态”-“网络连接详细信息”中,出现了2个IPv4的地址(一个是DHCP分配的169.254.xx.xx的IP,另一个是我配置的静态地址),但是网络是没有正常与我所配置的静态地址正常通信的。这个是我执行后的截图,重启电脑后以太网配置静态IP,恢复正常。最终我查了好多网络上的解决办法,有些办法并没有解决我的问题。这个是网上别人的问题截图,我的也是类似这种。第一种(没有解决我的问题)第二种(没有解决我的问题)

Zlz_Nike的博客 2万+

[知识图谱构建] 一.Neo4j图数据库安装初识及药材供应图谱实例

2012年5月,谷歌公司的知识图谱(Knowledge Graph)产品被正式提出,其旨在将人、地点、物等信息作为实体,将实体间的联系作为关系,并将实体和关系以图的形式进行存储。作为语义网的最新产物,知识图谱这种新型的搜索引擎改变了传统的文本搜索结果,而随后国内公司也开发出了相应产品,例如百度公司的“知心”和搜狗公司的“知立方”等。知识图谱本质上属于一种语义网。知识图谱中的每一条数据或事实一般会采用 <实体,属性,属性值> <实体, 关系,

杨秀璋的专栏 1万+

Python模块生态全景:从数据处理到AI开发的核心工具

Python模块是扩展语言功能的核心组件,通过封装可重用代码实现特定功能。其工作原理是通过import机制将模块对象载入命名空间,显著提升开发效率和代码可维护性。在数据处理领域,Pandas的DataFrame和NumPy的ndarray构成了科学计算的基础架构,支持向量化运算和广播机制,使Python在机器学习和大数据分析场景中占据主导地位。Scikit-learn通过统一API设计降低了算法使用门槛,而PyTorch的动态计算图特性使其成为深度学习研究首选。Web开发中Django的全栈式框架与Fast

weixin_30691871的博客 399

Oracle EBS与SAP数据数据切换至迁移华为MetaERP分析

Oracle EBS到华为MetaERP的数据迁移可采用“表对表复制”思路,因其模块化设计下数据模型标准化、边界清晰。核心业务对象存储在结构明确的主表中,与MetaERP模型兼容度高,便于直接映射。而SAP到MetaERP的迁移则因SAP高度优化的复杂表结构(如簇表/池表)、数据分散冗余、深度依赖配置等特点,无法简单复制,必须采用基于业务对象的迁移方法,通过视图/BAPI提取数据并进行深度转换。两种迁移的本质差异源于源系统的数据模型设计理念不同。

金牌架构师 1379

python 科学计算基础教程电子版-Python 科学计算基础 (整理)

Python是一种面向对象的、动态的程序设计语言,具有非常简洁而清晰的语法,既可以用于快速开发程序脚本,也可以用于开发大规模的软件,特别适合于完成各种高层任务。随着NumPy、SciPy、matplotlib、ETS等众多程序库的开发,Python越来越适合于做科学计算。与科学计算领域最流行的商业软件MATLAB相比,Python是一门真正的通用程序设计语言,比MATLAB所采用的脚本语言的应用范...

weixin_37988176的博客 717

【局部规划模块轨迹优化算法】EM_planner最大期望滚动优化算法

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对EM_planner最大期望滚动优化算法做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容。

qq_35635374的博客 762

camera QXXX架构

This article introduces the QCX camera architecture for Qualcomm’s latest automotive chips including SA8650. It elaborates the layered camera stack under QNX, HGY and HQX systems, covering client applications, stream manager, CamX components and hardware d

qq_39257814的博客 4546

遗传算法解N皇后问题:Python实战与工程化实现

遗传算法是一种受生物进化启发的全局优化方法,其核心在于通过选择、变异等机制在复杂解空间中搜索最优解。在组合优化领域,N皇后问题作为典型的NP-hard约束满足问题,天然适合作为GA原理验证与工程落地的基准场景。本文聚焦于如何将抽象的遗传操作(如适应度设计、种群初始化、变异策略)转化为稳定、可调、可视化的Python代码,特别解析了为何在N皇后中放弃交叉而专注邻位交换变异、如何用1/(q+0.001)构建高区分度适应度函数、以及种群规模与问题规模间的经验缩放规律。内容覆盖从命令行参数设计、收敛行为诊断到大规模

weixin_34405557的博客 527

个人顶级AI助手OpenClaw(Clawdbot) - 新手快速入门指南

本文详细介绍了个人顶级AI助手OpenClaw(Clawdbot) 的快速入门指南,包括安装部署和使用配置及注意事项

program哲学 5309

Python科学计算 第二版

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34088598的博客 215

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

为什么Python是机器学习项目最不费劲、最扛事的语言

Python作为机器学习主流开发语言,其核心价值不在于底层性能,而在于极低的认知负荷与超高开发效率。它通过简洁语法、动态类型和交互式探索(如Jupyter)显著缩短‘想法→可运行代码’路径;依托NumPy、PyTorch等C/CUDA加速库,将计算瓶颈外包,自身专注流程调度与实验迭代。在数据清洗、特征工程、模型验证等占全流程70%以上的非训练环节,Python凭借pandas、scikit-learn等开箱即用的生态,实现分钟级反馈与无缝工具链切换。这种‘人效优先’的设计哲学,使其成为算法验证、MLOps落

weixin_34375251的博客 444

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Python编程入门:从环境搭建到基础语法全解析

Python作为一门解释型高级编程语言,以其简洁的语法结构和丰富的标准库著称。其动态类型系统和自动内存管理机制大大降低了编程门槛,特别适合初学者快速上手。在技术实现层面,Python通过全局解释器锁(GIL)管理线程安全,同时支持多进程并发模型。从工程实践角度看,Python广泛应用于Web开发、数据分析、人工智能等领域,其中Django和Flask框架简化了后端服务开发,NumPy和Pandas则为科学计算提供了高效工具链。本文以Python 3.x版本为基础,详细讲解从环境配置到基础语法的核心知识,帮助

weixin_30520015的博客 415

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

上一篇: 遇到禁止复制该怎么办?幸好我会Python...
下一篇: 当面试官问这些基础的Python问题时,竟然还有80%的人不会!
克金森沐沐
博客等级 码龄6年 694粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值