繁体   English   中英

MATLAB函数graphallshortestpaths不返回对称矩阵

[英]MATLAB function graphallshortestpaths not returning symmetric matrix

我正在使用MATLAB函数graphallshortestpaths来计算无向网络的顶点之间的最短路径。 无向网络以加权边缘列表文件的形式提供,您可以在此处找到。

这是我用来计算最短路径的MATLAB代码:

A=load('genome_edge_list');

%Extract the edges
E=[A(:,1);A(:,2)]; 

%Extract the vertices
V=unique(E); 

%N is the number of vertices
N=length(V); 

%Take the inverse of the weights
A(:,3)=1./A(:,3);

%Create a sparse weighted adjacency matrix
B=sparse(A(:,1),A(:,2),A(:,3),N,N);

%Make B symmetric
B=sparse(full(B)+full(B)');

%Compute shortest paths
D=graphallshortestpaths(B,'directed',false);

现在,MATLAB作为输出提供的矩阵D是不对称的。 但是,由于graphallshortestpaths的输入是稀疏格式的对称矩阵,因此输出应该是对称矩阵。 那我在做什么错?

我可以在mathworks上找到的唯一相关问题是问题,但是在该问题中,OP显然没有给出对称矩阵作为输入,这解释了MATLAB返回的矩阵为何不对称的原因。

编辑:

为了查看D和D'的距离,我计算了以下内容:

E=D';
C=D==E;
find(C==0)

这将返回以下线性索引:

 33133
 543038
 1363077
 1398421
 1398786
 1399373

但D和E在这些索引处的值相同,例如D(33133)= 0.1024 = E(33133)。 现在,如果我采用两个矩阵的差,那么我发现这些指标的差为-1.0000e-05。 因此,正如@beaker指出的那样,这似乎是一个舍入错误。 但是,正如我在下面的评论中所写的那样,我不明白这种情况如何发生,因为graphsallshortestpaths仅计算一次节点i和j之间的距离,因此D(i,j)和D(i,j)的值应该是相同计算的结果。

夫妻或备注:

  • 正如@beaker在评论中提到的那样,这很可能是一个数字问题。 我会特别厌倦您求逆并执行A(:,3)=1./A(:,3); 尝试输出一些调试值,并查看此反函数是否符合您的预期。
  • 在使B对称的直线上:确定要执行full(b)'而不是full(b).' 第一个是隐居者,第二个是移调!
  • 同样在使B对称的同一行上:也许您在那里缺少0.5因子? 所以不是B=sparse(full(B)+full(B)'); B=sparse((full(B)+full(B).').*0.5); (请参阅此答案 )。

我还认为您在第二行中无意中写了H而不是E ,对吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM