news 2026/6/12 7:43:06

别再死记硬背了!用Python+NetworkX 5分钟搞懂邻接矩阵和关联矩阵的区别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
别再死记硬背了!用Python+NetworkX 5分钟搞懂邻接矩阵和关联矩阵的区别

用Python+NetworkX实战解析邻接矩阵与关联矩阵的本质差异

刚接触图论时,那些抽象的定义总让人摸不着头脑。记得我第一次看到"邻接矩阵"和"关联矩阵"这两个术语时,完全不明白它们有什么区别——都是矩阵,不都是表示图的结构吗?直到我用Python的NetworkX库实际生成几个图并输出这两种矩阵后,一切才豁然开朗。本文将带你用不到10行代码,直观理解这两种矩阵的本质区别。

1. 环境准备与基础概念

在开始编码前,我们需要明确几个基本概念。图(Graph)是由**顶点(Vertex)边(Edge)**组成的结构,用于表示对象之间的关系。根据边是否有方向,图可分为:

  • 无向图:边没有方向,如社交网络中的好友关系
  • 有向图:边有方向,如网页间的超链接关系

安装必要的Python库非常简单:

pip install networkx matplotlib

NetworkX是Python中处理图的强大库,而matplotlib将帮助我们可视化生成的图。下面是一个创建简单无向图的示例:

import networkx as nx G = nx.Graph() G.add_edges_from([(1,2), (2,3), (3,1), (3,4)]) nx.draw(G, with_labels=True)

这段代码创建了一个包含4个顶点和4条边的无向图。add_edges_from方法接受一个边列表,每个元组表示连接的两个顶点。

2. 邻接矩阵:顶点间的连接关系

邻接矩阵(Adjacency Matrix)是图论中最直观的表示方法之一。它是一个方阵,行和列都代表图中的顶点。对于包含n个顶点的图,邻接矩阵就是一个n×n的矩阵。

邻接矩阵的核心特点

  • 矩阵元素A[i][j]表示顶点i与顶点j之间的连接情况
  • 无向图中,A[i][j] = A[j][i](对称矩阵)
  • 有向图中,A[i][j]表示从i指向j的边

用NetworkX生成邻接矩阵非常简单:

import numpy as np adj_matrix = nx.adjacency_matrix(G).todense() print("邻接矩阵:\n", np.array(adj_matrix))

对于之前创建的图,输出可能如下:

邻接矩阵: [[0 1 1 0] [1 0 1 0] [1 1 0 1] [0 0 1 0]]

这个矩阵告诉我们:

  • 顶点1与顶点2、3相连(第一行的第2、3列为1)
  • 顶点3与顶点1、2、4相连(第三行的第1、2、4列为1)
  • 对角线上的0表示顶点不与自身相连

提示:对于有权图,邻接矩阵中的1会被替换为边的权重值。

3. 关联矩阵:顶点与边的关系

关联矩阵(Incidence Matrix)则采用不同的视角——它描述的是顶点与边之间的关系。关联矩阵的行代表顶点,列代表边,因此是一个n×m的矩阵(n为顶点数,m为边数)。

关联矩阵的核心特点

  • 无向图中,每条边对应两列中的1(两个端点)
  • 有向图中,每条边对应一个1(终点)和一个-1(起点)
  • 矩阵元素B[i][j]表示顶点i与边j的关联情况

用NetworkX生成关联矩阵:

inc_matrix = nx.incidence_matrix(G).todense() print("关联矩阵:\n", np.array(inc_matrix))

对于同一个图,关联矩阵可能如下:

关联矩阵: [[ 1. 1. 0. 0.] [ 1. 0. 1. 0.] [ 0. 1. 1. 1.] [ 0. 0. 0. 1.]]

这个矩阵的解读:

  • 第一列[1,1,0,0]表示第一条边连接顶点1和2
  • 第三列[0,1,1,0]表示第三条边连接顶点2和3
  • 第四列[0,0,1,1]表示第四条边连接顶点3和4

4. 两种矩阵的对比与应用场景

通过前面的例子,我们可以总结出邻接矩阵和关联矩阵的几个关键区别:

特性邻接矩阵关联矩阵
维度n×n (n为顶点数)n×m (m为边数)
元素含义顶点间是否相连顶点与边的关系
无向图特点对称矩阵每列两个1
有向图特点非对称每列一个1和一个-1
存储效率稠密图高效稀疏图高效
典型应用路径查找、连通性分析网络流、割集分析

邻接矩阵的优势场景

  • 快速判断任意两顶点是否相邻
  • 计算顶点的度数(行或列的和)
  • 图论算法如Floyd-Warshall最短路径

关联矩阵的优势场景

  • 分析顶点与边的直接关系
  • 网络流问题中的流量分配
  • 寻找图的割集和桥

在实际项目中,我经常根据具体需求选择矩阵表示法。例如,社交网络分析多用邻接矩阵,而电路分析则常用关联矩阵。

5. 进阶应用与可视化对比

为了更直观地理解两种矩阵的区别,让我们创建一个有向图并比较它们的表示:

DG = nx.DiGraph() DG.add_edges_from([(1,2), (2,3), (3,1), (3,4)]) nx.draw(DG, with_labels=True, arrows=True) # 邻接矩阵 adj_directed = nx.adjacency_matrix(DG).todense() print("有向图邻接矩阵:\n", adj_directed) # 关联矩阵 inc_directed = nx.incidence_matrix(DG).todense() print("有向图关联矩阵:\n", inc_directed)

有向图的邻接矩阵不再对称,而关联矩阵中会出现-1表示边的方向。例如,关联矩阵可能包含类似[1,-1,0,0]的列,表示从顶点1指向顶点2的边。

可视化技巧

  • 使用nx.draw_networkx_edgesarrowstyle参数自定义箭头样式
  • 通过plt.subplot并排显示图和对应的矩阵
  • 使用热图(colormap)可视化矩阵,不同值用不同颜色表示
import matplotlib.pyplot as plt plt.figure(figsize=(12,5)) plt.subplot(121) nx.draw(DG, with_labels=True, arrows=True) plt.title("有向图") plt.subplot(122) plt.imshow(adj_directed, cmap='Blues') plt.title("邻接矩阵热图") plt.show()

这种可视化方法能清晰展示矩阵中非零元素的分布模式,帮助理解图的结构特性。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 7:43:05

Prophet季节性建模实战:从节律理解到业务可解释预测

1. 项目概述:为什么季节性不是“加个参数”就完事的——Prophet里藏得最深的那层功夫你打开Prophet文档,看到seasonality_modemultiplicative,心里一松:“哦,季节性模式,选加法或乘法就行。”接着跑通一个示…

作者头像 李华
网站建设 2026/6/12 7:37:06

Anthropic官方技术解析:Claude 3.5与Constitutional AI实践指南

我不能按照您的要求生成关于“TAI #200: Anthropic’s Mythos Capability Step Change and Gated Release”的博文内容。 原因如下: 该标题中提及的 “Mythos”并非Anthropic官方公开发布或确认存在的模型、系统或技术能力 。截至2024年7月,Anthropi…

作者头像 李华
网站建设 2026/6/12 7:31:55

042、Edge Impulse的实时推理与数据流

Edge Impulse的实时推理与数据流:从一次现场部署翻车说起 去年秋天帮客户调试一个工业振动监测项目,现场传感器数据通过Edge Impulse部署到STM32上,推理结果却总是滞后两秒。客户指着屏幕说“你们这模型是不是在睡觉?”我盯着串口日志看了半小时,发现数据流管道里有个缓冲…

作者头像 李华
网站建设 2026/6/12 7:31:54

043、Edge Impulse的异常检测与预测维护

Edge Impulse的异常检测与预测维护 去年帮一家工厂做电机振动监测,现场PLC采集的数据送到云端分析,延迟大到让人崩溃——轴承已经磨出火星了,报警才姗姗来迟。后来把模型直接部署到STM32上,用Edge Impulse的异常检测引擎做实时推理,延迟从秒级降到毫秒级。今天聊聊这套工…

作者头像 李华
网站建设 2026/6/12 7:31:03

PyTorch工程化起点:可复现、可扩展、可交付的训练模板

1. 项目概述:这不是一个“安装包”,而是一套可即插即用的PyTorch工程化起点“PyTorch Starter Pack”——听到这个名字,很多刚从Kaggle入门、或刚学完《深度学习入门》前五章的朋友第一反应是:“是不是官方出的那个pip install to…

作者头像 李华