与图相关的一些矩阵

news2024/10/6 5:57:53

目录

  • 前言
  • 正文
    • 邻接矩阵(Adjacency matrix)
    • 度矩阵(Degree matrix)
    • 关联矩阵(Incidence matrix)
    • 拉普拉斯矩阵
      • 常规拉普拉斯矩阵
      • 拉普拉斯矩阵标准化

前言

以无向图为例,介绍与图相关的各种矩阵。我们定义下面的图为 G G G

import networkx as nx
import matplotlib.pyplot as plt
G = nx.Graph()
G.add_edges_from([(1,2), (2,3), (2,4), (2,5), (3,4), (4,5)]) 
plt.figure(figsize=(5,5))
nx.draw(G, with_labels=True, font_weight='bold', 
        node_size =1000, node_color='cyan', width=2)

在这里插入图片描述

正文

邻接矩阵(Adjacency matrix)

表示顶点之间相邻关系的矩阵,相邻节点在其相应坐标上的值为1。如下所示:
A = [ 0 1 0 0 0 1 0 1 1 1 0 1 0 1 0 0 1 1 0 1 0 1 0 1 0 ] A = \begin{bmatrix} 0 & 1 & 0 & 0 & 0 \\ 1 & 0 & 1 & 1 & 1 \\ 0 & 1 & 0 & 1 & 0 \\ 0 & 1 & 1 & 0 & 1 \\ 0 & 1 & 0 & 1 & 0 \end{bmatrix} A=0100010111010100110101010

在networkx中的API如下:

A = nx.adjacency_matrix(G).toarray()
print(A)
"""
[[0 1 0 0 0]
 [1 0 1 1 1]
 [0 1 0 1 0]
 [0 1 1 0 1]
 [0 1 0 1 0]]
"""

度矩阵(Degree matrix)

度矩阵是对角阵,对角上的元素为各个顶点的度。如下所示:

D i , j ≔ { d e g ( v i ) if  i = j 0 otherwise \begin{matrix} D_{i,j} \coloneqq \begin{cases} deg(v_i) &\text{if } i=j \\ 0 &\text{otherwise} \end{cases} \end{matrix} Di,j:={deg(vi)0if i=jotherwise
G G G 的度矩阵为:
D = [ 1 0 0 0 0 0 4 0 0 0 0 0 2 0 0 0 0 0 3 0 0 0 0 0 2 ] D = \begin{bmatrix} 1 & 0 & 0 & 0 & 0 \\ 0 & 4 & 0 & 0 & 0 \\ 0 & 0 & 2 & 0 & 0 \\ 0 & 0 & 0 & 3 & 0 \\ 0 & 0 & 0 & 0 & 2 \end{bmatrix} D=1000004000002000003000002

networkx没有提供相应的API,不过度矩阵也很容易根据邻接矩阵求出:

D = np.diag(A.sum(0)) # 邻接矩阵在任意轴上的和转换为对角矩阵
print(D)
"""
[[1 0 0 0 0]
 [0 4 0 0 0]
 [0 0 2 0 0]
 [0 0 0 3 0]
 [0 0 0 0 2]]
"""

关联矩阵(Incidence matrix)

关联矩阵将每一行分配给一个节点,将每一列分配给一条边。

e 1 e_1 e1 e 2 e_2 e2 e 3 e_3 e3 e 4 e_4 e4 e 5 e_5 e5 e 6 e_6 e6
1100000
2111100
3010010
4001011
5000101

在networkx中的API如下:

print(nx.incidence_matrix(G).toarray())
"""
[[1. 0. 0. 0. 0. 0.]
 [1. 1. 1. 1. 0. 0.]
 [0. 1. 0. 0. 1. 0.]
 [0. 0. 1. 0. 1. 1.]
 [0. 0. 0. 1. 0. 1.]]
"""

拉普拉斯矩阵

本节介绍几种拉普拉斯矩阵的公式及例子,详细内容参见《关于谱图理论-图傅里叶变换-谱卷积等谱图领域知识的理解》的 Laplacian矩阵简介 一节。

注:由于关联矩阵与邻接矩阵的等价性,拉普拉斯矩阵也可以通过关联矩阵求出,本文只介绍通过邻接矩阵求拉普拉斯的公式,详细内容可参见 wiki百科拉普拉斯矩阵 。

常规拉普拉斯矩阵

L = D − A L=D-A L=DA,其中 D D D 是度矩阵, A A A 是邻接矩阵。

在networkx中的API如下:

L = nx.laplacian_matrix(G).toarray()
print(L)
"""
[[ 1 -1  0  0  0]
 [-1  4 -1 -1 -1]
 [ 0 -1  2 -1  0]
 [ 0 -1 -1  3 -1]
 [ 0 -1  0 -1  2]]
"""

拉普拉斯矩阵标准化

具有大度数的节点,也称为重节点(heavy node),会导致拉普拉斯矩阵中的对角线值大的元素支配矩阵属性。标准化旨在通过将拉普拉斯矩阵的条目除以顶点度数,使此类顶点的影响与其他顶点的影响更相等。 为了避免被零除,具有零度数的孤立顶点被排除在标准化过程之外。

L n o r m = D − 1 / 2 L D − 1 / 2 = I − D − 1 / 2 A D − 1 / 2 L^{norm} = D^{-1/2} L D^{-1/2}= I-D^{-1/2} A D^{-1/2} Lnorm=D1/2LD1/2=ID1/2AD1/2
,其中 D D D 是度矩阵, L L L 是邻接矩阵,I是单位矩阵。

numpy计算代码为:

D1 = np.diag(1/np.sqrt(A.sum(0)))  # D^{-1/2}
L_norm = D1.dot(L).dot(D1)
print(L_norm)
"""
[[ 1.         -0.5         0.          0.          0.        ]
 [-0.5         1.         -0.35355339 -0.28867513 -0.35355339]
 [ 0.         -0.35355339  1.         -0.40824829  0.        ]
 [ 0.         -0.28867513 -0.40824829  1.         -0.40824829]
 [ 0.         -0.35355339  0.         -0.40824829  1.        ]]
"""

networkx API为:

L_norm = nx.normalized_laplacian_matrix(G).toarray()
print(L_norm)
"""
[[ 1.         -0.5         0.          0.          0.        ]
 [-0.5         1.         -0.35355339 -0.28867513 -0.35355339]
 [ 0.         -0.35355339  1.         -0.40824829  0.        ]
 [ 0.         -0.28867513 -0.40824829  1.         -0.40824829]
 [ 0.         -0.35355339  0.         -0.40824829  1.        ]]
"""

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/77734.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS之背景样式及边框样式

1、背景样式 常用属性: background-color:背景颜色background-image:背景图片background-repeat:背景图片的平铺方式background-position:背景图片的位置background-attachment:背景图随滚动条的移动方式 …

ADI Blackfin DSP处理器-BF533的开发详解19:LAN的网口设计(含源代码)

硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 功能介绍 BF533说实话用来做LAN的应用有些许勉强,因为他自己不带网口,要做的话,需要在总线上挂,那…

3D视觉PnP问题

文章目录背景和定义方法分类典型方法P3P(角锥法)DLT单应性矩阵分解迭代法EPnP其他延伸总结背景和定义 目前常用的pnp方法有很多,但是本人学习和查阅后发现比较零散,因此,在这里将所学习的方法按照理解分类和总结,并且…

体验了一下火爆全球的 ChatGPT,我惊呆了

这几天,要说编程圈最热的话题,莫过于OpenAI的ChatGPT,写小说,写代码,找BUG,写论文,画漫画,谱曲……简直没有它干不了的事。 趁着下班时间,我也光速注册体验了一下&#…

深度整理总结MySQL——事务专辑

事务前言什么是事务事务的特性事务的状态事务会引发什么问题?解决事物引发的问题手段事务日志Undo Log 日志简单介绍具体实现Buffer PoolBuffer Pool缓存什么?Redo Log日志为什么需要Redo Log?什么是 redo log?redo log要写入磁盘&#xff0…

保姆级教程:手把手教你使用 Keras 搭建神经网络

大家好,本文从0到1详细讲解两种基于Keras的建模方法: 基于Sequential的建模;快速方便,易上手 基于函数式API的建模;易于扩展,灵活性强 文章目录你会学到什么?技术提升导入内置数据集数据缩放和…

【GRU回归预测】基于卷积神经网络结合门控循环单元CNN-GRU实现数据多维输入单输出预测附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

ChatGPT强悍的编程能力,让我吓出一身冷汗!

最近有好几个人给我安利ChatGPT,说老刘快你去看看吧,这货实在太强了,搞不好我们程序员都失业了。刚开始我都是微微一笑,怎么可能?我之前的观点一直都是在我的有生之年,AI绝对不可能干掉程序员。但是安利的人…

一篇文章让你懂 io流

文件:就是保存数据的地方。文件流:文件在程序中是以流的形式来操作的。流:数据在数据源(文件)和程序(内存)之间经历的路径。输入流:数据从文件(磁盘)到Java程…

Spring-Cloud-Admin-06

前言 admin是用来监控各个服务的状况的,通过前台页面,可以查看我们各个服务的一个状态,是否在线,服务状况的一个框架。 服务端项目使用 admin有服务端和客户端,我们不需要每个服务都导入admin的客户端依赖,…

以太网 网络高可用性(链路聚合、LACP模式、静态手动模式)

2.9.0 以太网 网络高可用性(链路聚合、LACP模式、静态手动模式) 网络高可用性2.9.0 以太网 网络高可用性(链路聚合、LACP模式、静态手动模式)一、简介:1、单板可靠性:1.1、实现机柜式的可靠性提升&#xff…

Java#35(多线程扩展)

目录 一.定时器 定时器是一种控制任务延时调用, 或者周期调用的技术 1.Timer定时器(不推荐) 2.ScheduledExecutorService定时器(推荐) 二.并发与并行 三.线程状态 一.定时器 定时器是一种控制任务延时调用, 或者周期调用的技术 1.Timer定时器(不推荐) 代码示范: import …

Microsoft Store无法打开的解决办法【成功解决】

Microsoft Store无法打开解决办法我自己的解决办法其他Bug导致Microsoft Store无法打开的解决办法vpn代理问题使用TLS 1.2其他BUG解决方案成功解决之前我就有安装wsl的想法,但是他要求打开Microsoft Store,我尝试了各种办法,都不行。今天终于…

SpringCloud-全面详解(学习总结---从入门到深化)

​​​​​​​ 微服务架构进化论 单体应用阶段 (夫妻摊位) 在互联网发展的初期,用户数量少,一般网站的流量也很少,但硬 件成本较高。因此,一般的企业会将所有的功能都集成在一起开发 一个单体应用,然后将该单体应用…

Python代码加速100倍,针对Excel自动化处理的加速实战!

并发 vs 并行 说到并发编程,我们先来澄清一下并发 (Concurrency) 和 并行 ( Parallelism)这两个概念,因为这个两个概念的含义是不同的。 并行(Parallelism)指的就是在同一时刻,有两个或两个以上的任务的代码在处理器…

Spring Cloud Ribbon(负载均衡器)介绍及使用

目前主流的负载方案分为以下两种: 集中式负载均衡,在消费者和服务提供方中间使用独立的代理方式进行负载,有硬件的(比如 F5),也有软件的(比如 Nginx)。客户端自己做负载均衡&#x…

[附源码]Python计算机毕业设计SSM基于框架的秧苗以及农产品交易网站(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

命令设计模式

一、命令模式 1、定义 命令模式(Command Pattern)是对命令的封装,每一个命令都是一个操作,请求方发出请求要求执行一个操作,接收方收到请求并执行操作。属于行为型设计模式。 命令模式通过在请求与实现之间引入一个抽…

Spring注解开发

1、Spring注解开发 1 注解开发定义Bean对象【重点】 目的:xml配置Bean对象有些繁琐,使用注解简化Bean对象的定义 问题导入 问题1:使用什么标签进行Spring注解包扫描? 问题2:Component注解和Controller、Service、Re…

【指纹识别】指纹识别【含GUI Matlab源码 029期】

⛄一、指纹识别简介 指纹识别技术主要分三个步骤:指纹预处理、特征提取、指纹分类与匹配。 无论是指纹分类还是指纹匹配,都需要提取指纹的有效特征,而特征提取的性能很大程度上要依赖于指纹图像的质量。在实际应用中,由于采集条件和采集设备的因素,采集到的指纹图像…