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

SciPy 图结构

在 SciPy 中图结构Graph的处理主要依赖于scipy.sparse.csgraph模块。该模块专门用于处理稀疏矩阵表示的图邻接矩阵或拉普拉斯矩阵提供了一系列高效的图算法。注意SciPy 的图功能侧重于数值计算和算法实现如最短路径、连通分量、谱聚类而非通用的图数据结构操作如添加节点、动态修改边。对于复杂的图操作通常推荐使用networkx库但scipy.sparse.csgraph在处理大规模图百万级节点时性能更优。1. 图的表示稀疏矩阵在scipy.sparse.csgraph中图通常用稀疏矩阵表示邻接矩阵 (Adjacency Matrix)A[i, j] w表示节点i到j有权重为w的边。无向图矩阵对称 (A[i, j] A[j, i])。有向图矩阵不对称。距离矩阵A[i, j]表示i到j的距离若不可达则为inf或 0取决于算法。创建示例importnumpyasnpfromscipy.sparseimportcsr_matrix# 定义邻接矩阵 (无向图)# 0-1 (权重 4), 0-2 (权重 2), 1-2 (权重 1), 1-3 (权重 5), 2-3 (权重 8)adj_datanp.array([4,2,1,5,8,1,5,8])# 对称边adj_rownp.array([0,0,1,1,2,2,3,3])adj_colnp.array([1,2,0,2,0,1,1,2])# 构建稀疏邻接矩阵graphcsr_matrix((adj_data,(adj_row,adj_col)),shape(4,4))2. 核心算法模块 (scipy.sparse.csgraph)功能分类函数名描述适用场景最短路径shortest_path计算所有点对或单源最短路径 (Dijkstra, Bellman-Ford, Floyd-Warshall, Johnson)导航、网络路由dijkstra单源最短路径 (Dijkstra 算法)加权有向/无向图bellman_ford单源最短路径 (支持负权边)含负权边的图连通性connected_components找出连通分量 (有向/无向)社交网络社区发现、电路分析is_connected判断图是否连通快速检查最小生成树minimum_spanning_tree计算最小生成树 (MST)网络布线、聚类图排序reverse_cuthill_mckee重排矩阵以减小带宽优化稀疏矩阵存储/计算谱图理论laplacian计算拉普拉斯矩阵谱聚类、图分割流与匹配max_flow最大流算法网络流量优化bipartite_matching二分图匹配任务分配、推荐3. 常用算法详解与示例3.1 最短路径 (Shortest Path)场景计算节点 0 到所有其他节点的最短距离。fromscipy.sparse.csgraphimportdijkstra,shortest_pathimportnumpyasnp# 邻接矩阵 (0 表示无边inf 表示不可达)# 注意dijsktra 默认将 0 视为无边除非 directedFalse 且权重为 0dist_matrix,predecessorsdijkstra(graph,directedFalse,# 无向图return_predecessorsTrue,indices0# 从节点 0 开始)print(距离:,dist_matrix)# 输出: [0. 4. 2. 7.] (0-1:4, 0-2:2, 0-3: 0-2-1-3 2158? 修正: 0-2(2), 2-1(1), 1-3(5) 2158. 但 0-1(4), 1-3(5) 9. 最短是 8)# 实际计算: 0-2 (2), 2-1 (1), 1-3 (5) 总 8.# 修正示例数据: 0-1(4), 0-2(2), 1-2(1), 1-3(5), 2-3(8)# 0-3: 0-2-1-3 215 8. 0-1-3 459. 最短是 8.# 获取路径defget_path(predecessors,start,end):path[]currendwhilecurr!start:path.append(curr)currpredecessors[curr]ifcurr-9999:returnNone# 不可达path.append(start)returnpath[::-1]pathget_path(predecessors,0,3)print(f路径:{path})# [0, 2, 1, 3]3.2 连通分量 (Connected Components)场景找出图中有多少个独立的子图。fromscipy.sparse.csgraphimportconnected_components n_components,labelsconnected_components(graph,directedFalse,connectionweak# 有向图时可用 strong)print(f连通分量数:{n_components})print(f节点标签:{labels})# 输出: 所有节点标签相同 (如 [0, 0, 0, 0])表示全连通3.3 最小生成树 (Minimum Spanning Tree)场景连接所有节点且总权重最小的子图。fromscipy.sparse.csgraphimportminimum_spanning_tree mstminimum_spanning_tree(graph)print(MST 邻接矩阵:\n,mst.toarray())# 输出: 仅保留 MST 中的边其他为 03.4 拉普拉斯矩阵 (Laplacian)场景用于谱聚类、图分割。fromscipy.sparse.csgraphimportlaplacian# 计算归一化拉普拉斯矩阵L_normlaplacian(graph,normedTrue)print(归一化拉普拉斯矩阵:\n,L_norm.toarray())4. 性能与限制特性说明输入格式必须是scipy.sparse矩阵 (CSR, CSC, COO 等)。规模适合大规模图百万级节点因为基于稀疏矩阵运算。限制不支持动态图操作如add_edge需重新构建矩阵。负权边dijkstra不支持负权边需用bellman_ford。有向图默认directedTrue无向图需设directedFalse。5. 与 NetworkX 的对比维度SciPy (csgraph)NetworkX核心数值计算、稀疏矩阵图数据结构、算法库性能极快(C/Fortran 底层)较慢 (纯 Python)规模适合百万级节点适合万级节点功能专注核心算法 (路径、MST、连通性)功能丰富 (生成、可视化、复杂网络分析)易用性需手动构建稀疏矩阵API 友好直接操作节点/边适用大规模数据、科学计算、机器学习原型设计、教学、复杂网络分析最佳实践小规模/复杂逻辑用networkx构建图再转换为scipy.sparse进行计算。大规模/纯数值直接用scipy.sparse构建邻接矩阵调用csgraph。6. 完整示例从 NetworkX 到 SciPyimportnetworkxasnxfromscipy.sparseimportcsr_matrixfromscipy.sparse.csgraphimportshortest_path# 1. 用 NetworkX 构建图 (方便)Gnx.Graph()G.add_edge(0,1,weight4)G.add_edge(0,2,weight2)G.add_edge(1,2,weight1)G.add_edge(1,3,weight5)G.add_edge(2,3,weight8)# 2. 转换为 SciPy 稀疏矩阵adj_matrixnx.adjacency_matrix(G,weightweight)# 3. 用 SciPy 计算最短路径dist,predsshortest_path(adj_matrix,methodD,directedFalse,return_predecessorsTrue)print(距离矩阵:\n,dist.toarray())7. 总结scipy.sparse.csgraph是处理大规模稀疏图的利器尤其适合最短路径(导航、路由)连通性分析(社区发现)最小生成树(网络优化)谱图分析(聚类、分割)关键点图必须表示为稀疏矩阵。算法基于C/Fortran性能极高。适合数值计算场景不适合动态图操作。提示在 Vue 前端项目中图算法通常由后端 Python 服务如 Flask/FastAPI执行计算结果如最短路径、社区标签通过 API 返回前端使用D3.js或ECharts进行可视化。

相关文章:

SciPy 图结构

在 SciPy 中,图结构(Graph) 的处理主要依赖于 scipy.sparse.csgraph 模块。该模块专门用于处理稀疏矩阵表示的图(邻接矩阵或拉普拉斯矩阵),提供了一系列高效的图算法。 注意:SciPy 的图功能侧重…...

从零构建GUI自动化测试框架:openclaw-maxauto核心原理与实战

1. 项目概述:一个面向自动化测试的“机械爪”看到Maxch3306/openclaw-maxauto这个项目标题,我的第一反应是:这应该是一个与自动化测试或机器人控制相关的开源工具。拆解一下,“openclaw”直译为“开放的爪子”,很容易联…...

EASY-HWID-SPOOFER:保护数字身份的Windows硬件伪装利器

EASY-HWID-SPOOFER:保护数字身份的Windows硬件伪装利器 【免费下载链接】EASY-HWID-SPOOFER 基于内核模式的硬件信息欺骗工具 项目地址: https://gitcode.com/gh_mirrors/ea/EASY-HWID-SPOOFER 在数字世界中,您的硬件设备就像指纹一样独一无二。操…...

WinRAR隐藏技能:除了.rar和.zip,批处理还能压成啥?附参数避坑指南

WinRAR命令行进阶指南:解锁隐藏压缩格式与参数避坑实战 在大多数用户的认知里,WinRAR只是个能处理.rar和.zip文件的图形化工具。但它的命令行版本却隐藏着一个完全不同的世界——支持超过20种压缩格式转换、批量自动化处理、甚至能实现文件系统级操作。本…...

运放噪声深度解析:从原理到工程实践的计算与优化

1. 项目概述:为什么我们需要关心运放的噪声?如果你曾经调试过一个高精度的信号调理电路,比如一个微弱的传感器信号放大链路,或者一个高分辨率的ADC前端,你大概率遇到过这样的场景:理论上,你的电…...

Systemback实战:从系统备份到自定义镜像部署全流程

1. Systemback基础入门:你的系统时光机 第一次听说Systemback时,我正面临着一个典型运维困境:实验室20台Ubuntu工作站需要统一部署开发环境。传统的手动安装方式不仅耗时,还容易产生配置差异。直到发现这个开源神器,才…...

技术人的“薪资锚点”策略:第一个报价为什么至关重要?

被低估的“第一印象”在软件测试领域,技术人习惯于与代码、逻辑和数据打交道,往往将薪资谈判视为一种非理性的“讨价还价”。然而,从行为经济学的视角审视,谈判的开局瞬间,其实已经为最终结果划定了无形的边界。那个最…...

深入理解C/C++混合编程

在工作中,C、C密不可分,做我们嵌入式方面的,当然更多的是C,但,有时候却少不了C,而且是C、C混搭(混合编程)在一起的,比如,RTP视频传输,live555多媒…...

3种方式掌控多显示器亮度:Monitorian让你的Windows屏幕管理更智能

3种方式掌控多显示器亮度:Monitorian让你的Windows屏幕管理更智能 【免费下载链接】Monitorian A Windows desktop tool to adjust the brightness of multiple monitors with ease 项目地址: https://gitcode.com/gh_mirrors/mo/Monitorian 你是否曾为Windo…...

CircuitPython开发实战:从环境搭建到内存优化与硬件选型

1. CircuitPython开发环境搭建与核心概念 如果你是从Arduino或者传统的嵌入式C开发转向微控制器编程,第一次接触CircuitPython的感觉,就像是突然有人给你递了一把万能钥匙。过去,点个灯、读个传感器,你得跟寄存器、数据手册、还有…...

CircuitPython嵌入式开发:从代码编辑、串口调试到库管理的完整工作流

1. 从零开始:CircuitPython的嵌入式开发哲学如果你和我一样,是从Arduino或者传统的C语言嵌入式开发转过来的,第一次接触CircuitPython的感觉,大概就像从手动挡汽车换到了电动车。那种“拧钥匙、挂挡、踩离合”的繁琐步骤&#xff…...

nRF52 ADC配置与实战:从原理到电池监测与低功耗优化

1. 项目概述:为什么nRF52的ADC值得你花时间研究? 如果你正在用nRF52系列芯片(比如nRF52832或nRF52840)做物联网设备、可穿戴设备或者任何需要感知物理世界的项目,那么模数转换器(ADC)绝对是你绕…...

小微团队如何利用 Taotoken 统一管理多个 AI 模型密钥与用量

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 小微团队如何利用 Taotoken 统一管理多个 AI 模型密钥与用量 对于小型开发或产品团队而言,在项目开发中集成多个大语言…...

第15章:C++ 日志监控告警

第15章:C++ 日志监控告警 本章定位:第四卷《实战卷》第五篇"生产环境"第 16 章。 一个 C++ 服务上线后能不能"看见"它,能不能"听见"它喊救命,决定了你深夜会不会被叫起来还能在 30 分钟内修好。 目录 01.可观测性三件套 1.1 logs / metrics …...

从零到1打造爆款智能体产品:AI产品经理/经理/开发工程师必备技能图谱!

本文系统梳理了从零到一设计和开发智能体产品的关键知识和技能,覆盖AI产品经理、AI项目经理和AI应用开发工程师三大核心角色的能力要求。内容涉及需求分析、场景选择、产品设计、数据标注、模型评估、AI伦理、项目规划、技术评估、提示工程、RAG技术、Agent架构、工…...

Keil MDK Debug 命令行常用命令

适用&#xff1a;Keil MDK-ARM (uVision5)&#xff0c;进入 Debug 模式后&#xff0c;下方的 Command 窗口或 View → Command Window 打开。一、断点管理 (BKPT / BS / BL) 硬件断点 (Breakpoint Set) BS <func> ; 在函数入口设断点 BS <func&…...

第14章:C++ 代码规范评审

第14章:C++ 代码规范评审 本章定位:第四卷《实战卷》第四篇"工程化与编译链接"第 14 章。 与第 13 章《静态分析工具》构成"机器查 + 人查"互补:能机器查的让 lint 拦,必须人脑判断的进 review。 目录 01.规范与评审定位 1.1 规范的三个层级 1.2 评审解…...

浏览器扩展开发实战:光标交互防火墙的设计与实现

1. 项目概述与核心价值最近在折腾浏览器插件开发&#xff0c;偶然在GitHub上看到了一个名为“Raidu Firewall Cursor Extension”的项目。光看这个名字&#xff0c;就让我这个对网络安全和效率工具都感兴趣的老码农眼前一亮。这玩意儿本质上是一个浏览器扩展&#xff0c;但它把…...

通过Taotoken用量看板与账单追溯精细化管理团队AI支出

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 通过Taotoken用量看板与账单追溯精细化管理团队AI支出 对于团队管理者而言&#xff0c;将大模型能力集成到业务中后&#xff0c;一…...

Wonder3D终极指南:如何用单张图片快速生成高质量3D模型

Wonder3D终极指南&#xff1a;如何用单张图片快速生成高质量3D模型 【免费下载链接】Wonder3D Single Image to 3D using Cross-Domain Diffusion for 3D Generation 项目地址: https://gitcode.com/gh_mirrors/wo/Wonder3D 你是否曾梦想过将一张普通的2D图片瞬间变成生…...

[4G5G专题] RRU CFR技术:从“削峰”到“塑形”的算法演进与工程实践

1. 从“削峰”到“塑形”&#xff1a;CFR技术的本质蜕变 第一次接触CFR&#xff08;Crest Factor Reduction&#xff09;技术时&#xff0c;我把它简单理解为“信号削峰器”——就像用菜刀切掉蛋糕顶端多余的部分。早期在4G RRU&#xff08;Remote Radio Unit&#xff09;项目中…...

JSON Lint for PHP:让JSON验证不再是一场噩梦

JSON Lint for PHP&#xff1a;让JSON验证不再是一场噩梦 【免费下载链接】jsonlint JSON Lint for PHP 项目地址: https://gitcode.com/gh_mirrors/jso/jsonlint 你是否曾因一个JSON格式错误而花费数小时调试&#xff1f;是否在接收外部API数据时&#xff0c;因为格式不…...

当开源代码也成了「敏感物项」

前两天看到一条新闻&#xff1a;英国国民健康服务体系&#xff08;NHS&#xff09;下令关闭数百个 GitHub 仓库&#xff0c;全部设为私有&#xff0c;原因是安全担忧。 不是某个军用级的加密库&#xff0c;不是核设施控制系统的代码——只是一些普通的医疗数据处理工具。但因为…...

长期使用Taotoken聚合API对项目开发效率的实际影响

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 长期使用Taotoken聚合API对项目开发效率的实际影响 在为期数月的项目开发周期中&#xff0c;我们团队将Taotoken作为所有大模型调用…...

电子取证实战:利用FTK Imager与VMware实现DD/E01镜像的动态仿真与启动

1. 电子取证中的镜像仿真入门 第一次接触电子取证时&#xff0c;我被各种专业术语搞得晕头转向。直到有一次需要分析一个嫌疑人的硬盘镜像&#xff0c;才真正体会到动态仿真的重要性。简单来说&#xff0c;动态仿真就是让存储在DD或E01镜像中的操作系统"活"起来&…...

别再傻傻分不清!5分钟搞懂NMOS和PMOS,从符号到选型一次讲透

5分钟掌握NMOS与PMOS实战技巧&#xff1a;从符号识别到精准选型 1. 初识MOS管&#xff1a;电子世界的交通警察 想象一下&#xff0c;你正面对一堆外形相似的MOS管&#xff0c;就像站在十字路口的交警&#xff0c;需要迅速判断每辆车的行驶方向。NMOS和PMOS正是电子电路中的&quo…...

如何利用 Taotoken 为 Hermes Agent 提供自定义模型支持

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 如何利用 Taotoken 为 Hermes Agent 提供自定义模型支持 对于使用 Hermes Agent 构建复杂应用的开发者而言&#xff0c;其强大的自…...

为Claude Code配置Taotoken解决API密钥不稳定与Token不足问题

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为Claude Code配置Taotoken解决API密钥不稳定与Token不足问题 应用场景类&#xff0c;许多开发者使用Claude Code作为编程助手但常…...

项目烂尾的魔咒:为什么你的物联网系统总是“上线即落后”?

在物联网行业有一个令人沮丧的“3-6-12”现象&#xff1a;3个月调研&#xff0c;6个月开发&#xff0c;12个月后项目烂尾或重构。 为什么投入巨资打造的智慧园区或工业互联系统&#xff0c;往往在验收通过的那一刻&#xff0c;就已经开始走向僵化&#xff1f;问题往往不出在硬…...

如何三步轻松下载B站高清视频:BilibiliDown完整使用指南

如何三步轻松下载B站高清视频&#xff1a;BilibiliDown完整使用指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.com/gh_mirrors…...