我正在使用MATLAB函數graphallshortestpaths來計算無向網絡頂點之間的最短路徑。無向網絡作爲加權邊緣列表文件給出,您可以在其中找到here。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上可以找到的唯一相關問題是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指出,因此它似乎是一個四捨五入的錯誤。然而,正如我在下面的評論中寫的,我不明白這是怎麼發生的,因爲圖的最短路徑計算節點i和j之間的距離只有一次,因此D(i,j)和D(i,j)應該是相同計算的結果。
數值有多遠?我唯一能想到的就是浮點精度。另外,我認爲第三行應該是'V = unique(E);'因爲'H'沒有定義,但是我不明白這是否會導致問題,即使'H'已經在其他地方定義了。 – beaker
@beaker謝謝,那是一個錯字。我用'C = D == D.''檢查了值的大小,'find(C == 0)'給了我一個D和D的六個索引列表。應該是不同的。然而,這些指數的值是相同的,所以我很困惑爲什麼'對稱(D)'返回0。 –
一個小例子會有所幫助。 – beaker