一种使用Python计算可达矩阵的简单方法

article/2025/9/25 2:25:57

在进行编码前要简单介绍几个知识点:有向图,邻接矩阵,可达矩阵

有向图、邻接矩阵、可达矩阵

有向图

现实中常常会表示从一个地点到另一个地点的路径,这样的带有从起点到终点的路线表示可以用有向图表示。如下图所示:
有向图
在该图中,可以看成由地点F1到F2,以及F1到F3,F3到F2的路径。
这种有向图也表示两个因素的相互影响关系,再结合上面的有向图,我们可以理解为因素F1对因素F2有影响,对F3也有影响,因素F3对F2也有影响。

邻接矩阵

邻接矩阵内的元素表示两两元素之间的关系,在邻接矩阵中,矩阵[i,j]表示从Fi可以直接到达Fj,或者Fi可以直接影响Fj。
再看上图,F1,F2,F3之间的邻接矩阵为:
在这里插入图片描述
在该邻接矩阵中,1表示可以直接影响,或者直接到达,0表示不可影响或不可到达。
邻接矩阵的元素进行运算遵循以下规则:
在这里插入图片描述

可达矩阵

可达矩阵中的元素表示从一个地点到另一个地点是否存在一个路径,或者一个因素到另一个因素是否有影响路径。
可达矩阵可由邻接矩阵得到,得到的方法有如下规则:
假设有邻接矩阵A,以及单位矩阵I(I和A的维度是相同的),则对两进行进行(A+I)运算,当满足如下关系时:
在这里插入图片描述
则M就是求出来的可达矩阵。

代码测试部分

其实这种利用邻接矩阵求可达矩阵的运算就是简单的与或运算,网上有很多代码都是根据与或运算来得到的,但是可以有另外一种思路,就是在总结上述矩阵时,先使用传统的矩阵运算获得矩阵,在获得新矩阵时,先对矩阵进行处理,处理逻辑为:若元素值大于或等于1,则该元素就是1,如果是0,则就是0,不管它。我的代码就是这种思想。
我们采用了网上有答案的一个邻接矩阵进行测试,原矩阵为:
在这里插入图片描述
可以看出已经将邻接矩阵和单位矩阵进行了初步的处理。
求可达矩阵简单代码如下:

#使用numpy包
import numpy as np
relat_matrix =np.matrix([[1,0,1,1,1,0,0],[0,1,0,0,0,1,1],[0,1,1,0,0,0,0],[0,1,0,1,0,0,0],[0,0,0,0,1,1,0],[0,0,0,0,0,1,1],[0,0,0,0,0,0,1]])
# 第K+1步更新的矩阵
new_matrix =relat_matrix
#第K步的更新的矩阵
old_matrix = new_matrix
#进行循环终止的判断条件
m =0
#统计运算的步骤K
step =1
while m ==0:old_matrix = new_matrixnew_matrix =old_matrix*relat_matrixfor i in range(0,len(new_matrix)):for j in range(0,len(new_matrix)):#如果元素大于1,就输出为1if(new_matrix[i,j]>=1):new_matrix[i,j] = 1step = step+1print(step)#判断K次更新的矩阵和K+1次更新的矩阵是否相等if( old_matrix == new_matrix).all():#如果相等,终止循环,让m=1,并输出结果m=1print(new_matrix,step)

输出结果为:
结果
从上述的运行结果可以看出,总共在运行到K=4的时候便得到了想要的可达矩阵,并将可达矩阵输出到界面上,与原推理的最终结果如下图是相同的。
在这里插入图片描述


http://chatgpt.dhexx.cn/article/7lUXlNcT.shtml

相关文章

系统工程利用python求解可达矩阵

系统工程中利用python求解可达矩阵 在系统工程书中,建立解释结构模型中求解可达矩阵是必不可少的一环故利用python写了一段求解可达矩阵的代码,只需要输入邻接矩阵便可计算得到可达矩阵代码如下: import numpy as npdef change(a): 乘以自身…

通过有向图的可达矩阵判断有向图的连通类型

我们根据有向图的连通情况,可以将图分成四种类型 非连通图弱连通图单向连通图强连通图 我们可以通过邻接矩阵A,计算可达矩阵B,然后经过二值化之后得到可达性矩阵P来判断该图属于以上哪一种。 如果P中元素都为1,说明任意两点之间…

【算法导论】有向图的可达矩阵

有时候,我们关注的不是从一个地点到另一个地点的费用,而是能否从一个顶点到达另一个顶点。因此我们可以假设所有边的权值为单位1,在下面的算法中,我们可以在O(n*n*n)的时间内计算出图中任意两点是否可达,我用可达矩阵来…

图论总复习

《图论及其应用》 主要考试知识点: 第2章,第 3章,第5 章,第 6章,章节占比:20%,25%,30%,25%。 **第2章:**图的定义、度的概念、握手定理、可图画、同构、子…

图的邻接矩阵求图的出度,入度,可达矩阵,判断强连通,弱连通,单向连通(C++,vs2017)

一、介绍概念 1、邻接矩阵 将一个n个节点的图,转化成一个n*n的矩阵G,G[i][j]表示第i个节点到第j个节点的的权重。 对于上图邻接矩阵为: 2、度 度分为入度和出度:某个节点的入度就是可以通过一条边到达这个节点的节点个数&#xff…

【离散数学】图论 第七章(3) 图的矩阵表示(邻接矩阵、可达矩阵、传递闭包求解算法)

本文属于「离散数学」系列文章之一。这一系列着重于离散数学的学习和应用。由于内容随时可能发生更新变动,欢迎关注和收藏离散数学系列文章汇总目录一文以作备忘。此外,在本系列学习文章中,为了透彻理解数学知识,本人参考了诸多博…

硬盘的存储原理和内部架构

首先,让我们看一下硬盘的发展史: 1956年9月13日,IBM的IBM 350 RAMAC(Random Access Method of Accounting and Control)是现代硬盘的雏形,整个硬盘需要50个直径为24英寸表面涂有磁浆的盘片,它相当于两个冰箱的体积&…

硬盘结构与工作原理

一、硬盘的接口 接口种类: ATA(Advanced Technology Attachment)(IDE):速度最大可达133MB/S; SATA(Serial ATA):速度最大可达300MB/S SCSI(Small Computer System Interface):转速最大可达15000rpm SAS(Serial Attachment SCSI):速度最大可达6GB/S 二、硬盘的物理结…

硬盘的种类、区别、运行原理

硬盘是电脑主要的储存媒介之一,由一个或者多个铝制或者玻璃制的碟片组成。碟片外覆盖有铁磁性材料。 硬盘的种类可分为: 1、固态硬盘(SSD),采用闪存颗粒来储存; 2、机械硬盘(HDD)&a…

硬件(磁盘):机械硬盘内部硬件结构和工作原理详解

从理解磁盘IO开始 主轴让磁盘盘片转动,然后传动手臂可伸展让读取头在盘片上进行读写操作。每个盘片有两面,都可记录信息,所以一张盘片对应着两个磁头。 磁盘物理结构如下图: 硬盘的外部物理结构 一般硬盘正面贴有产品标签,主要…

硬盘的读写原理详解

硬盘的种类主要是SCSI 、IDE 、以及现在流行的SATA等;任何一种硬盘的生产都要一定的标准;随着相应的标准的升级,硬盘生产技术也在升级;比如 SCSI标准已经经历了SCSI-1 、SCSI-2、SCSI-3;其中目前咱们经常在服务器网站看…

磁盘存储原理

最近学习linux内核源码,读到操作系统boot引导相关内容时,对于磁盘相关原理介绍引起我的兴趣。阅读相关资料后,对磁盘工作原理做一个总结,参考资料为深入理解计算机系统(CSAPP)。 磁盘是广泛应用的数据存储设备&#x…

[硬件] 简单介绍磁盘结构及工作原理

一、前言 最近学习DOS下的汇编语言用到了很多与硬件相关的指令,比如上一期写的int 13h(直接磁盘服务),其中接口参数中就有驱动器号,磁头,磁道,扇区的概念&am…

机械硬盘的存储结构及原理

本文转载自:https://blog.csdn.net/u013125075/article/details/86576640 硬盘是电脑主要的存储媒介之一。根据硬盘的读写方式和存储方式不同,当前主流的硬盘可以分为固态硬盘(SSD硬盘)、机械硬盘(HDD 硬盘)两种。由于…

硬盘技术原理

**传统硬盘** 所有机械硬盘的原理相同。盘片被磁性材料覆盖,盘片上的磁性粒子被极化以表示一个二进制信息单元(或比特)。使用磁性材料来存储数据历史很久了,这种方式相对便宜,因此相对于其它存储技术而言,这…

机械硬盘原理介绍

硬盘结构及工作原理 目录: 硬盘结构 概念:盘面、柱面、磁道、扇区、簇 盘面 磁道 扇区 柱面 簇 硬盘读写数据的过程 SMR叠瓦式硬盘 其他硬盘知识 硬盘发展历史 硬盘结构及工作原理 硬盘结构 经过封装后的硬盘,对我们一般呈现出如下的样子…

机械硬盘原理

本篇参考自: https://zhuanlan.zhihu.com/p/89505052 https://blog.csdn.net/li_wen01/article/details/80221182 磁盘存储器原理介绍: 为了了解磁盘的运行原理,先上一些图来展示机械硬盘的构造和运行状态 可以看见,硬盘拆开…

硬盘的读写原理

硬盘的种类主要是SCSI 、IDE 、以及现在流行的SATA等;任何一种硬盘的生产都要一定的标准;随着相应的标准的升级,硬盘生产技术也在升级;比如 SCSI标准已经经历了SCSI-1 、SCSI-2、SCSI-3;其中目前咱们经常在服务器网站看…

※ 将一个txt文档按\n格式分割成多个txt

※ 将一个txt文档按\n格式分割成多个txt 原始文档格式为: # -*- coding: utf-8 -*- """ Created on Mon May 20 15:33:23 2019author: sun """# 读取txt文件 import retext open(聚类4类.txt,"r", encodingUTF-8).read()…