当前位置: 首页 > news >正文

GMAN解读(论文+代码)

一、注意力机制

        注意力机制与传统的卷积神经网络不同的是,前者擅长捕获全局依赖和长程关系,权重会动态调整。而后者对于所有特征都使用同一个卷积核。关于更多注意力机制内容,详见:

注意力机制、自注意力机制、多头注意力机制、通道注意力机制、空间注意力机制超详细讲解-CSDN博客

        而本论文基于空间注意力机制,提出了空间和时间注意力机制,以建模动态的时空相关性。 

二、GMAN 模型

 

1. 时空嵌入(Sptio-Tempoal Embedding,STE)

        STE 的作用是将图结构和时间信息融入多注意力机制中。

        空间嵌入采用Node2Vec方法将N个顶点编码为保留图结构信息的向量,然后将其输入两层全连接神经网络中以进行联合训练。从而可以得到一个 RD 的向量。

        时间嵌入而是将每个时间步编码为向量。首先将将一天划分为 T 个时间步,并对每个时间步的“周几”和“时间段”进行独热编码。然后通过两层全连接网络将时间特征也转换为一个 RD 的向量。

        最后,对于顶点 vi 和时间步 tj ,STE定义为

2.  时空注意力模块(ST-Attention Block)

2.1 空间注意力(Spatial Attention)

        在传统图卷积GCN中,隐藏状态通过以下方式计算:

        其中,A代表图的邻接矩阵,W代表权重。但在实际场景中,不同邻居对目标节点的重要性可能不同。因此,在注意力机制中,通过一个注意力分数 α 表示顶点 v 对顶点 vi 的重要性。那么加入注意力机制后的隐藏状态计算方式如下:

        注意力分数 α 的计算方式如下所示:

                    

        式中,|| 表示拼接,<  ,> 表示左右两个元素点乘。e 也就是上一步的时空嵌入(STE)。 其代码如下所示:

X = tf.concat((X, STE), axis = -1)query = FC(X, units = D, activations = tf.nn.relu, bn = bn, bn_decay = bn_decay, is_training = is_training)
key = FC(X, units = D, activations = tf.nn.relu, bn = bn, bn_decay = bn_decay, is_training = is_training)# 多头分解(K代表有几个头)
query = tf.concat(tf.split(query, K, axis = -1), axis = 0)
key = tf.concat(tf.split(key, K, axis = -1), axis = 0)# 计算注意力分数
attention = tf.matmul(query, key, transpose_b = True)
attention /= (d ** 0.5)
attention = tf.nn.softmax(attention, axis = -1)
2.2 时间注意力(Temporal Attention) 

        时间注意力和空间注意力的实现方法类似。只有一点不同,空间注意力在空间维度(N)中捕捉节点间的依赖。而时间注意力在时间维度(num_step)中捕捉时间步间的依赖。

        作者在这一块的代码部分加入了可选的掩码(mask)。它与因果卷积的作用相同,都是为了解决时间序列建模中的因果性问题,防止未来信息泄露。不同点如下所示:

2.3 门控融合(Gated Fusion)

        在某些情况下,交通状况可能主要受空间因素影响(如附近道路拥堵)。在另一些情况下,时间因素可能更为关键(如高峰期的规律性变化)。为了平衡空间和时间注意力的贡献,使得模型可以在不同时空条件下动态调整两者的重要性,作者在这里使用了门控机制。Hs 代表空间注意力机制,Ht 代表时间注意力机制。

        z 是一个门控权重,z 越接近 1,模型越依赖空间注意力输出。反之越接近 0 ,模型越依赖时间注意力输出。其中 z 通过以下公式计算:

        其算法代码如下, 

XS = FC(HS, units = D, activations = None,bn = bn, bn_decay = bn_decay,is_training = is_training, use_bias = False)
XT = FC(HT, units = D, activations = None,bn = bn, bn_decay = bn_decay,is_training = is_training, use_bias = True)
z = tf.nn.sigmoid(tf.add(XS, XT))
H = tf.add(tf.multiply(z, HS), tf.multiply(1 - z, HT))

3. 编码器-解码器结构

        编码器会接收历史交通数据(比如过去 1 小时的交通流量),将这些时间序列的信息“浓缩”为一个隐藏表示,这个表示概括了所有历史时间步的信息。解码器接收编码器生成的隐藏表示,结合目标预测的要求(比如未来 1 小时的交通流量),逐步生成未来时间步的预测值。

4. 转换注意力(Transform Attention) 

        在长时间交通预测中,我们不仅需要知道历史的交通状况,还要明白历史的哪些时刻对未来的影响更重要。而转换注意力的作用就是把历史信息直接“映射”到未来,建立一种历史时间步和未来时间步之间的直接联系。比如,要想预测明天早上的交通状况,就要先知道今天早上的交通状况和昨天晚上的交通状况。如果昨天晚上有交通事故,那么一定会影响今天早上的交通状况。最后就可以建立映射关系:

        昨天晚上——>今天早上,那么今天晚上——>明天早上。

        转换注意力会计算每个历史时间步和每个未来时间步之间的“相关性分数”。这个分数告诉我们某个历史时刻对未来有多重要。然后根据计算出的相关性分数,为未来时间步选择最重要的历史时间步,提取它们的特征信息。最后把这些选出来的历史特征送到解码器,直接生成未来的预测值。

        在代码上,transformAttention 和 temporalAttention、spatialAttention 的写法类似,只不过传入的参数有所不同。具体来说,也就是 Query、Key、Value 不同。transformAttention 使用历史时间步(STE_P)和预测时间步(STE_Q) 构建 Query-Key 机制,实现时间序列的转换。

 

相关文章:

GMAN解读(论文+代码)

一、注意力机制 注意力机制与传统的卷积神经网络不同的是&#xff0c;前者擅长捕获全局依赖和长程关系&#xff0c;权重会动态调整。而后者对于所有特征都使用同一个卷积核。关于更多注意力机制内容&#xff0c;详见&#xff1a; 注意力机制、自注意力机制、多头注意力机制、通…...

《文件操作》

一 . 文本文件和二进制文件 根据数据的组织形式&#xff0c;数据文件被分为了二进制文件和文本文件 数据在内存中是以二进制的形式存储&#xff0c;如果不加转换的输出到外存的文件中&#xff0c;就是二进制文件。 如果要求在外存上以ASCII 码的形式存储&#xff0c;则需要再存…...

【君正T31开发记录】8.了解rtsp协议及设计模式

前边搞定了驱动&#xff0c;先不着急直接上手撸应用层的代码&#xff0c;先了解一下大致要用到的东西。 设计PC端先用vlc rtsp暂时H264编码&#xff08;vlc好像不支持h265,这个后边我试试&#xff09;的视频流&#xff0c;先需要支持上rtsp server&#xff0c;了解rtsp协议是必…...

C++菜鸟教程 - 从入门到精通 第三节

上节课的题 上节课的题,大家都做出来了吗? 看一下这道题: 题目描述 N!1*2*...*N; 例5!1*2*3*4*5120. 编程求1!2!3!...N!. 输入 输入一行&#xff0c;只有一个整数n (1<n<10) 输出 输出只有一行&#xff08;这意味着末尾有一个回车符号&#xff09;&#xff0c;包括1…...

原生JS和CSS,HTML实现开屏弹窗

开屏弹窗常应用于打开游戏&#xff0c;或者打开网站的时候&#xff0c;跳出来在正中间&#xff0c;来显示一些信息&#xff0c;并可以设置今日不再显示 CSS代码如下 <style>#box {width: 100vw;height: 100vh;background-color: rgba(0, 0, 0, 0.2);position: relative…...

微软发布Win11 24H2系统11月可选更新KB5046740!

系统之家11月22日报道&#xff0c;微软针对Win11 24H2系统推出2024年11月最新可选更新补丁KB5046740&#xff0c;更新后系统版本后升至26100.2454&#xff0c;此次更新后修复当应用程序以PDF和XLSX格式导出图表对象时停止响应、无法使用API查找旋转信息等问题。以下小编将给大家…...

【Rabbitmq篇】高级特性----TTL,死信队列,延迟队列

目录 一.TTL 1.设置消息的TTL 2.设置队列的TTL 3.俩者区别 二.死信队列 定义&#xff1a; 消息成为死信的原因&#xff1a; 1.消息被拒绝&#xff08;basic.reject 或 basic.nack&#xff09; 2.消息过期&#xff08;TTL&#xff09; 3.队列达到最大长度 ​编辑 …...

【Linux】gcc/g++使用

编译 我们知道&#xff0c;gcc只能编译C&#xff0c;g既能编译C&#xff0c;也能编译C。 由于两者的选项是相同的&#xff0c;这里我们使用gcc来说明。 这就是一个我们在linux中gcc编译一段代码后会自动生成一个a.out为名的可执行文件&#xff0c;然后我们./a.out&#xff0c…...

IDEA2023 SpringBoot整合MyBatis(三)

一、数据库表 CREATE TABLE students (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL,age INT,gender ENUM(Male, Female, Other),email VARCHAR(100) UNIQUE,phone_number VARCHAR(20),address VARCHAR(255),date_of_birth DATE,enrollment_date DATE,cours…...

Java网络编程 - cookiesession

cookie 之前学习了 Okhttp3 库可以调用API、抓取网页、下载文件。但是这些操作都是不要求登录的&#xff0c;如果 API、网页、文件等内容要求登录才能访问&#xff0c;就需要学习新的 cookie 相关的知识。 下面以豆瓣为例&#xff0c;使用 Java 程序读取“我的豆瓣”页面内容…...

100.【C语言】数据结构之二叉树的堆实现(顺序结构) 1

目录 1.顺序结构 2.示意图 ​编辑 从物理结构还原为逻辑结构的方法 3.父子节点编号的规律 4.顺序存储的前提条件 5.堆的简介 堆的定义 堆的两个重要性质 小根堆和大根堆 6.堆的插入 7.堆的实现及操作堆的函数 堆的结构体定义 堆初始化函数HeapInit 堆插入元素函…...

《Python基础》之循环结构

目录 简介 一、for循环 1、基本语法与作用 2、使用 range() 函数配合 for 循环 3、嵌套的for循环 二、while循环 1、基本语法与作用 2、while 循环嵌套 &#xff08;1&#xff09;、while循环与while循环嵌套 &#xff08;2&#xff09;、while循环与for循环嵌套 简介 …...

使用JDBC操作数据库

文章目录 使用JDBC操作数据库1. JDBC访问数据库步骤2. Statement与PreparedStatement区别3. JDBC的内容4. JDBC封装4.1 为什么进行JDBC封装4.2 实现JDBC封装4.3 什么是DAO4.4 配置数据库访问参数4.5 配置数据库连接池使用之JNDI的方式 5. 单例模式5.1 懒汉模式5.2 饿汉模式 使用…...

轻松解析 PDF 文档:深入了解 Python 的 pdfplumber 库

轻松解析 PDF 文档&#xff1a;深入了解 Python 的 pdfplumber 库 PDF 是一种常见的文件格式&#xff0c;广泛用于报告、文档、表单等领域。然而&#xff0c;如何高效解析 PDF 内容&#xff08;尤其是文本和表格&#xff09;&#xff0c;一直是开发者面临的挑战。pdfplumber 是…...

实验五 时域采样与频域采样

时域采样理论的验证 【实例3-1】近似绘制x (n) R4n 在(0,2 π \pi π ) 上的幅频响应曲线( F T [ x ( n ) ] FT[x(n)] FT[x(n)] )。 x [1, 1, 1, 1]; N 64; xk fft(x, N); figure; subplot(2, 1, 1); stem(0:3, x, .); subplot(2, 1, 2); k 0:N-1; plot(2*k/N, abs(x…...

爬虫cookie反爬------加速乐(jsl)

加速乐 反爬虫技术&#xff1a;加速乐采用了包括OB混淆、动态加密算法和多层Cookie获取等高级反爬虫技术&#xff0c;确保整体校验的严密性。关键校验字段位于Cookie中的 __jsl_clearance_s&#xff0c;其验证过程通常涉及三次关键的请求&#xff0c;有效抵御恶意爬虫的侵扰。…...

设计模式——解释器模式

定义&#xff1a; 解释器模式是一种行为设计模式&#xff0c;它给定一个语言&#xff0c;定义它的文法的一种表示&#xff0c;并定义一个解释器&#xff0c;这个解释器使用该表示来解释语言中的句子。在这种模式中&#xff0c;通常会将一个复杂的表达式&#xff08;如数学表达…...

sorted()函数

sorted(iterable, keyNone, reverseFalse)iterable: 需要排序的可迭代对象&#xff08;如列表、元组、字符串等&#xff09;。 key: 一个函数&#xff0c;用于从每个元素中提取排序的依据。如果未指定&#xff0c;默认直接比较元素本身。 reverse: 一个布尔值&#xff0c;Tru…...

动静态分析

静态分析 获取哈希值&#xff1a; 查壳&#xff1a; 导出函数&#xff1a; 获取资源信息&#xff1a; 通过发现dos头和pe头&#xff0c;来确定它是个可执行程序。 动态分析...

2024年信号处理与神经网络应用国际学术会议(SPNNA 2024)

重要信息 会议时间&#xff1a;2024年12月13-15日 会议地点&#xff1a;中国武汉 会议官网&#xff1a;www.spnna.org 会议简介 2024年信号处理与神经网络应用国际学术会议&#xff08;SPNNA 2024&#xff09;将于2024年12月13日至15日在中国武汉召开。本次会议旨在为全球研…...

winfrom快速自适应

在软件界面设计中&#xff0c;我们通常需要添加各种布局器和规则来实现界面布局&#xff0c;但对于不太熟练的工程师来说&#xff0c;这可能存在一定难度。这里要分享一种自适应布局的方法&#xff0c;它可以根据界面比例自动缩放内容控件&#xff0c;在较短时间内完成软件布局…...

VMware16安装macOS12【详细教程】

因为在应用上线IOS应用商店时&#xff0c;需要用到mac系统进行&#xff0c;于是就在VMware16pro虚拟机进行安装macOS12系统&#xff0c;安装的过程做了一个记录&#xff0c;希望对你有所帮助&#xff01; 前言 首先需要下载好下面工具&#xff1a; VMware workstation pro 16…...

【设计模式】【创建型模式(Creational Patterns)】之单例模式

单例模式是一种常用的创建型设计模式&#xff0c;其目的是确保一个类只有一个实例&#xff0c;并提供一个全局访问点。 单例模式的原理 单例模式的核心在于控制类的实例化过程&#xff0c;通常通过以下方式实现&#xff1a; 私有化构造函数&#xff0c;防止外部直接实例化。…...

【1.2 Getting Started--->Installation Guide】

NVIDIA TensorRT DOCS 此 NVIDIA TensorRT 10.6.0 安装指南提供安装要求、TensorRT 包中包含的内容列表以及安装 TensorRT 的分步说明。 安装指南 摘要&#xff1a; 本 NVIDIA TensorRT 10.3.0 安装指南提供了安装要求、TensorRT 软件包中包含的内容列表以及安装 TensorRT 的…...

Vue 中 data 属性为函数的深度剖析:原理、区别与实践

在 Vue.js 中,data 属性通常是一个 函数 而不是一个对象,这背后有一系列设计上的原因和原理,尤其是与 Vue 的组件系统、实例化机制、以及响应式数据的管理有关。下面我将详细解答这个问题,并结合实际项目示例和代码分析,进行全面讲解。 1. Vue 中 data 为什么是一个函数而…...

【漏洞复现】H3C 用户自助服务平台 dynamiccontent.properties.xhtml 远程命令执行

免责声明: 本文旨在提供有关特定漏洞的信息,以帮助用户了解潜在风险。发布此信息旨在促进网络安全意识和技术进步,并非出于恶意。读者应理解,利用本文提到的漏洞或进行相关测试可能违反法律或服务协议。未经授权访问系统、网络或应用程序可能导致法律责任或严重后果…...

【技术支持】vscode不使用插件,两种方式重命名html标签对

1. 使用 VS Code 内置功能 VS Code 内置支持 HTML/XML 标签对的重命名功能。步骤如下&#xff1a; 将光标放置在标签名上&#xff08;如 <div> 或</div>&#xff09;。按下快捷键 F2&#xff08;重命名符号&#xff09;。输入新的标签名&#xff0c;按 Enter&…...

【Seed-Labs 2.0】The Kaminsky Attack Lab

说在前面 本实验属为Seed-Labs 的DNS LAB 中的第二个实验&#xff0c;是第一个实验的延伸&#xff0c;从攻击者和受害者同一个LAN中变成不在同一个LAN中&#xff0c;该系列一共有五个实验: Local DNS Attack LabThe Kaminsky Attack LabDNS Rebinding Attack LabDNS Infrastr…...

node.js中使用express.static()托管静态资源

express.static()定义 express.static(root, [options])是一个中间件函数&#xff0c;负责为Express应用提供静态资源服务。它允许你指定一个或多个目录作为静态资源的根目录&#xff0c;当客户端请求这些资源时&#xff0c;Express会查找并返回对应的文件。 安装express npm i…...

SQL MAX() 函数深入解析

SQL MAX() 函数深入解析 概述 SQL&#xff08;Structured Query Language&#xff09;是一种广泛使用的数据库查询语言&#xff0c;它允许用户从数据库中检索、更新和管理数据。在SQL中&#xff0c;MAX() 函数是一个常用的聚合函数&#xff0c;用于从数据集中找出某一列的最大…...

WPF——自定义ToolTip

问题 前一天制作的图标按钮&#xff0c;在测试的过程中发现一个问题&#xff1a;为图标按钮添加的提示如下图所示&#xff0c;它的显示效果非常差&#xff0c;甚至不能看清文本内容&#xff0c;并且其字体与颜色也不是愚所希望的。 产生原因 此是由于tooltip有一个默认的样式…...

linux基本命令(1)

1. 文件和目录操作 ls — 列出目录内容 ls # 显示当前目录的文件和目录 ls -l # 显示详细的文件信息&#xff08;权限、大小、修改时间等&#xff09; ls -a # 显示所有文件&#xff08;包括隐藏文件&#xff09; ls -lh # 显示详细信息并以易读的方式显示文件大小 cd — 改…...

从0-1逐步搭建一个前端脚手架工具并发布到npm

前言 本文介绍的案例已同步到github&#xff0c;github地址。 vue-cli 和 create-react-app 等 cli 脚手架工具用于快速搭建应用&#xff0c;无需手动配置复杂的构建环境。本文介绍如何使用 rollup 搭建一个脚手架工具。 脚手架工具的工作流程简言为&#xff1a;提供远端仓库…...

开发者视角下的鸿蒙

鸿蒙操作系统&#xff08;HarmonyOS&#xff09;是华为公司自主研发的一款面向未来、面向全场景的分布式操作系统。它旨在为用户提供一个无缝的智能生活体验&#xff0c;支持多种终端设备&#xff0c;如智能手机、平板电脑、智能穿戴设备、智能家居等。鸿蒙操作系统的出现&…...

docker基础命令

目录 1、docker拉取镜像 2、查看镜像 3、运行镜像 4、查看容器 5、停止、启动、容器和删除容器 6、进入容器 7、删除镜像 8、保存镜像 9、加载镜像 10、镜像标签 11、制作镜像 ​12、镜像上传 1、docker拉取镜像 docker pull 用户名/镜像名:tag不加tag(版本号) 即…...

订单日记为“惠采科技”提供全方位的进销存管理支持

感谢温州惠采科技有限责任公司选择使用订单日记&#xff01; 温州惠采科技有限责任公司&#xff0c;成立于2024年&#xff0c;位于浙江省温州市&#xff0c;是一家以从事销售电气辅材为主的企业。 在业务不断壮大的过程中&#xff0c;想使用一种既能提升运营效率又能节省成本…...

C++共享智能指针

C中没有垃圾回收机制&#xff0c;必须自己释放分配的内存&#xff0c;否则就会造成内存泄漏。解决这个问题最有效的方式是使用智能指针。 智能指针是存储指向动态分配(堆)对象指针的类&#xff0c;用于生存期的控制&#xff0c;能够确保在离开指针所在作用域时&#xff0c;自动…...

数学建模学习(138):基于 Python 的 AdaBoost 分类模型

1. AdaBoost算法简介 AdaBoost(Adaptive Boosting)是一种经典的集成学习算法,由Yoav Freund和Robert Schapire提出。它通过迭代训练一系列的弱分类器,并将这些弱分类器组合成一个强分类器。算法的核心思想是:对于被错误分类的样本,在下一轮训练中增加其权重;对于正确分类…...

sqlite-vec一个SQLite3高效向量搜索扩展--JDBC环境使用

最近要用SQLite3&#xff0c;之前放出来了SQLiteUtile工具&#xff0c;方便操作。今天发现AIGC方面&#xff0c;RAG知识库需要使用向量数据库&#xff0c;来存储知识信息。一般呢都是用mysql&#xff0c;但无奈的是mysql就是不让用。突然又发现SQLite3有向量库扩展组件&#xf…...

Spark SQL操作

Spark SQL操作 文章目录 Spark SQL操作一、DataFrame的创建与保存1.前提操作2.数据准备3.创建4.保存DataFrame 二、DataFrame的操作1.printSchema2.show3.select4.filter5.groupBy(filed)6.sort(field) 三、临时表操作1.创建临时表2.通过临时表及SQL语句进行查询 四、从RDD转换…...

【大模型】LLaMA: Open and Efficient Foundation Language Models

链接&#xff1a;https://arxiv.org/pdf/2302.13971 论文&#xff1a;LLaMA: Open and Efficient Foundation Language Models Introduction 规模和效果 7B to 65B&#xff0c;LLaMA-13B 超过 GPT-3 (175B)Motivation 如何最好地缩放特定训练计算预算的数据集和模型大小&…...

聚焦AI存储,联想凌拓全力奔赴

【全球存储观察 &#xff5c; 科技热点关注】 每一个时代&#xff0c;都有每一个时代的骄傲。 在信息化时代&#xff0c;NAS文件存储肩负着非结构化数据管理与存储的重任&#xff0c;NetApp以其创新实力&#xff0c;赢得了全球存储市场的极高声誉。 在数智化时代&#xff0c;…...

ansible常用模块

一.ansible常用模块 ansible [主机or组列表] -m 模块 -a "参数"1.shell:类似于在终端上直接输入命令,支持bash特性2.command(默认模块):使用的变量需要事先定义好,不支持bash特性&#xff0c;如管道、重定向3.script: 执行脚本,支持python,shell脚本4.file:用于在被控…...

window11编译pycdc.exe

一、代码库和参考链接 在对python打包的exe文件进行反编译时&#xff0c;会使用到uncompyle6工具&#xff0c;但是这个工具只支持python3.8及以下&#xff0c;针对更高的版本的python则不能反编译。 关于反编译参考几个文章&#xff1a; Python3.9及以上Pyinstaller 反编译教…...

C语言——break、continue、goto

目录 一、break 二、continue 1、在while循环中 2、在for循环中 三、go to 一、break 作用是终止循环&#xff0c;在循环内遇到break直接就跳出循环。 注&#xff1a; 一个break语句只能跳出一层循环。 代码演示&#xff1a; #include<stdio.h>void test01() {for (…...

实战OpenCV之人脸识别

基础入门 随着计算机视觉技术和深度学习的发展,人脸识别已经成为一项广泛应用的技术,涵盖了从安全监控、身份验证、智能家居到大型公共安全项目等多个领域。 人脸识别技术通常包括以下几个主要步骤。 图像采集:通过摄像头或其他图像采集设备,捕获包含人脸的图像或视频帧。 …...

记录第一次安装laravel项目

window系统 Laravel中文文档&#xff1a;https://laravel-docs.catchadmin.com/docs/11/getting-started/installation 1.使用composer安装全局laravel composer global require laravel/installer2.安装完成后在命令行输入laravel&#xff0c;如果报错&#xff1a;laravel不是…...

AWTK-WEB 快速入门(1) - C 语言应用程序

先安装 AWTK Designer 用 AWTK Designer 新建一个应用程序 2.1. 新建应用程序 这里假设应用程序的名称为 AwtkApplicationC&#xff0c;后面会用到&#xff0c;如果使用其它名称&#xff0c;后面要做相应修改。 在窗口上放置一个按钮将按钮的名称改为 “close”将按钮的文本改…...

《操作系统 - 清华大学》4 -5:非连续内存分配:页表一反向页表

文章目录 1. 大地址空间的问题2. 页寄存器&#xff08; Page Registers &#xff09;方案3. 基于关联内存(associative memory )的反向页表&#xff08;inverted page table&#xff09;4. 基于哈希&#xff08;hashed&#xff09;查找的反向页表5. 小结 1. 大地址空间的问题 …...

数据可视化复习1-Matplotlib简介属性和创建子图

1.Matplotlib简介 Matplotlib是一个Python的2D绘图库&#xff0c;它可以在各种平台上以各种硬拷贝格式和交互环境生成具有出版品质的图形。通过Matplotlib&#xff0c;开发者可以仅需要几行代码&#xff0c;便可以生成绘图、直方图、功率谱、条形图、错误图、散点图等。 以下…...