방향없는 네트워크의 꼭짓점 사이의 최단 경로를 계산하기 위해 MATLAB 함수 graphallshortestpaths를 사용하고 있습니다. 방향이 지정되지 않은 네트워크는 가중 에지 목록 파일로 제공되며 here을 찾을 수 있습니다.MATLAB 함수 graphallshortestpath가 대칭 행렬을 반환하지 않습니다.
이 I 최단 경로를 계산하는 데 사용 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에서 찾을 수있는 유일한 관련 질문은 this 질문이지만 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)의 값은 한 번만 계산되므로 어떻게 발생하는지 이해할 수 없습니다. 같은 계산의 결과 여야합니다.
값은 얼마나 떨어져 있습니까? 내가 생각할 수있는 유일한 점은 부동 소수점 정밀도입니다. 또한, 제 3 행은'V = unique (E);'H'가 정의되어 있지 않아야한다고 생각합니다. 그러나'H'가 다른 곳에서 이미 정의 되었더라도 그 문제를 일으킬 수는 없습니다. – beaker
@ 비커 덕분에 오타가되었습니다. 나는 'C = D == D'와 'find (C == 0)'값이 얼마나 떨어져 있는지 확인해 봤는데 D와 D에 대한 6 개의 인덱스 목록을 제공한다. ' 다를 것입니다. 그러나 이러한 인덱스의 값은 동일하므로'issymmetric (D)'이 0을 반환하는 이유에 대해 당황 스럽습니다. –
작은 예제가 도움이 될 것입니다. – beaker