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

您所在的位置:网站首页 邻接矩阵计算器 一种使用Python计算可达矩阵的简单方法

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

2023-08-16 22:32| 来源: 网络整理| 查看: 265

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

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

现实中常常会表示从一个地点到另一个地点的路径,这样的带有从起点到终点的路线表示可以用有向图表示。如下图所示: 有向图 在该图中,可以看成由地点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_matrix new_matrix =old_matrix*relat_matrix for i in range(0,len(new_matrix)): for j in range(0,len(new_matrix)): #如果元素大于1,就输出为1 if(new_matrix[i,j]>=1): new_matrix[i,j] = 1 step = step+1 print(step) #判断K次更新的矩阵和K+1次更新的矩阵是否相等 if( old_matrix == new_matrix).all(): #如果相等,终止循环,让m=1,并输出结果 m=1 print(new_matrix,step)

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3