与图相关的一些矩阵

news/2024/5/15 14:59:54/文章来源:https://blog.csdn.net/u012762410/article/details/128261595

目录

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

前言

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

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=[0100010111010100110101010]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)

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

Di,j≔{deg(vi)if i=j0otherwise\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
GGG 的度矩阵为:
D=[1000004000002000003000002]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)

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

e1e_1e1e2e_2e2e3e_3e3e4e_4e4e5e_5e5e6e_6e6
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−AL=D-AL=DA,其中 DDD 是度矩阵,AAA 是邻接矩阵。

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

Lnorm=D−1/2LD−1/2=I−D−1/2AD−1/2L^{norm} = D^{-1/2} L D^{-1/2}= I-D^{-1/2} A D^{-1/2} Lnorm=D1/2LD1/2=ID1/2AD1/2
,其中 DDD 是度矩阵,LLL 是邻接矩阵,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.luyixian.cn/news_show_233585.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis cluster 集群安装

redis cluster 集群安装 redis集群方案 哨兵集群 如图,实际上还是一个节点对外提供服务,所以虽然是三台机器,但是还是一台机器的并发量,而且master挂了之后,整个集群不能对外提供服务 cluster集群 多个主从集群节点…

编写高质量代码 - 多线程和并发(2)

文章目录1. 使用线程异常处理器提升系统可靠性2. volatile不能保证数据同步3. 异步运算考虑使用Callable接口1. 使用线程异常处理器提升系统可靠性 我们要编写一个Socket应用,监听指定端口,实现数据包的接收和发送逻辑,这在早期系统间进行数据…

微信群营销方式微信群建群营销案例

今天我们以小区微信群营销为例,聊一聊具体的步骤和流程: 1、社群的建立,就是如何找到合适的小区,建立小区专属社群?因此,终端在做小区社群营销之前,需要先对当地所有的潜在小区做一个综合性的分析和评估&a…

ffmpeg库编译安装及入门指南(Windows篇)- 2022年底钜献

最近项目需要,使用了 ffmpeg 做摄像头视频采集和串流。这几天有点时间,打算把相关的一些知识记录分享一下。 在撰写本文时,我又在另外一台电脑上把 ffmpeg 重新安装了一遍,所以绝对真实靠谱!如果你觉得文章写得还不错…

Linux消息中间件-RabbitMQ

Linux消息中间件-RabbitMQ 消息中间件 MQ简介 MQ 全称为Message Queue, 消息队列。是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通…

cef浏览器加载过程实测ILoadHandler和IRequestHandler

针对方法GetResourceRequestHandler获取资源请求过程中,会多次发生请求,不知道何时加载完的问题,IRequestHandler没有了OnResourceLoadComplete和OnBeforeResourceLoad方法,如何判断是否加载完。使用browser.isLoading并不能真正的判断。所以想到了 OnFrameLoadEnd OnFram…

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

​​​​​​​ Spring Cloud Alibaba简介 什么是Spring Cloud Alibaba Spring Cloud Alibaba致力于提供微服务开发的一站式解决方案。 此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。 为…

微服务框架 SpringCloud微服务架构 微服务保护 31 限流规则 31.5 流控效果【排队等待】

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 微服务保护 文章目录微服务框架微服务保护31 限流规则31.5 流控效果【排队等待】31.5.1 流控效果【排队等待】31.5.2 案例31.5.3 总结31 限流…

【Java开发】 Spring 10 :Spring Boot 自动配置原理及实现

用了这么久的 SpringBoot ,我们再来回顾一下它,本文介绍 Spring Boot 的自动配置,这是它区别于 Spring 的最大的点,本文的自动配置项目包含三个项目,建议拉取仓库里的代码进行实践:尹煜 / AutoConfigDemo …

DCDC电感下方铜箔如何处理

挖:电感在工作时,其持续变化的电流产生的电磁波会或多或少的泄露出来,电感下方的铜箔受电磁波影响,就会有涡流出现,这个涡流,①可能对线路板上的信号线有干扰,②铜箔内的涡流会产生热量&#xf…

容器的常用方法和线程安全(Map、List、Queue)

一、Map 1. HashTable 线程安全的Map,用synchronized锁 2. Collections.synchronizedMap Collections.synchronizedMap(new HashMap()) 可以把HashMap变成线程安全的,锁粒度比HashTable稍微小一点 3. ConcurrentHashMap ConcurrentHashMap主要提高…

某Y易盾滑块acToken、data逆向分析

内容仅供参考学习 欢迎朋友们V一起交流: zcxl7_7 目标 网址:案例地址 这个好像还没改版,我看官网体验那边已经进行了混淆 只研究了加密的生成,环境不正确可能会导致的加密结果对 (太累了,先缓缓吧,最近事比…

农业灌区量测水流量在线监测系统解决方案-灌区信息化管理系统-灌区水网智慧化

平升电子农业灌区量测水流量在线监测系统解决方案/灌区信息化管理系统/灌区水网智慧化,对灌区的渠道水位、流量、水雨情、土壤墒情、气象等信息进行监测,同时对泵站、闸门进行远程控制,对重点区域进行视频监控,实现了信息的采集、…

使用openshift 进行云平台连接

使用openshift 进行云平台连接 OpenShift CLI on Windows openshift 文档地址 OpenShift CLI on Mac 通过Homebrew方式安装 brew install openshift-cli安装完成,进行验证 oc version服务连接 oc login 服务地址根据提示输入用户名和密码,即可连接…

【日常系列】LeetCode《20·数据结构设计》

数据规模->时间复杂度 <10^4 &#x1f62e;(n^2) <10^7:o(nlogn) <10^8:o(n) 10^8<:o(logn),o(1) 内容 lc 155 【剑指 30】【top100】&#xff1a;最小栈 https://leetcode.cn/problems/min-stack/ 提示&#xff1a; -2^31 < val < 2^31 - 1 pop、top 和…

深度学习设计模式(一):编写高质量代码的基础(多例子+代码)

学习如何编写高质量代码前言面向对象面向对象编程&#xff0c;面向对象编程语言面向对象分析 &#xff0c;面向对象设计封装&#xff0c;抽象&#xff0c;继承&#xff0c;多态封装抽象继承多态面向对象比面向过程有哪些优势&#xff0c;面向过程过时了&#xff1f;什么是面向过…

MOSFET 和 IGBT 栅极驱动器电路的基本原理学习笔记(四)高侧非隔离栅极驱动

高侧非隔离栅极驱动 1.适用于P沟道的高侧驱动器 2.适用于N沟道的高侧直接驱动器 1.适用于P沟道的高侧驱动器 高侧非隔离栅极驱动可按照所驱动的器件类型或涉及的驱动电路类型来分类。相应地&#xff0c;无论是使用P沟道还是 N沟道器件&#xff0c;是实施直接驱动、电平位移驱…

代码随想录训练营第44天|完全背包、LeetCode 518. 零钱兑换 II、 377. 组合总和 Ⅳ

完全背包 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品都有无限个&#xff08;也就是可以放入背包多次&#xff09;&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 完全背包和01背包问题唯一不同…

【Unity3D】使用GL绘制线段

1 前言 线段渲染器LineRenderer、拖尾TrailRenderer、绘制物体表面三角形网格从不同角度介绍了绘制线段的方法&#xff0c;本文再介绍一种新的绘制线段的方法&#xff1a;使用 GL 绘制线段。 Graphics Library&#xff08;简称 GL&#xff09;&#xff0c;包含一系列类似 OpenG…

MyBatisPlus入门

目录 概述 SpringBoot继承MyBatisPlus CRUD 新增 删除 修改 查询 条件构造器 全局配置 相关注解 ActiveRecord 插件 分页插件 防止全表删除插件 乐观锁插件 乐观锁插件的使用 逻辑删除 使用逻辑删除 扩展 自动填充 Sql注入器 代码生成器Generator 代码生成器MyBa…