簡體   English   中英

Matlab鄰接表到鄰接矩陣

[英]matlab adjacency list to adjacency matrix

如何通過Matab將鄰接列表轉換為鄰接矩陣

例如:這是鄰接表(無向),第三列是權重。

1 2 3
1 3 4
1 4 5
2 3 4
2 5 8
2 4 7

++++++++++++++++++++++++

應該轉換為:

   1  2  3  4  5  

1     0  4  5  0   
2  3     4  7  8  
3  4  7     0  0  
4  0  7  0     0  
5  0  8  0  0

您可以使用sparse矩陣。 rows是第一列, cols第二,和s重量。

A = sparse([rows; cols],[cols; rows],[s; s]);

如果要查看矩陣。 使用full()

更新:

我使答案變得更簡單(一切都在一行中,而不是按要求添加移調並包括說明:

list = [1 2 3
1 3 4
1 4 5
2 3 4
2 5 8
2 4 7];

rows = list(:,1)
cols = list(:,2)
s = list(:,3)

現在, rowscolss包含所需的信息。 稀疏矩陣需要三個向量。 兩個第一個向量的每一行, rowscolss的同一行中給出的值的索引(即權重)。

sparse命令將值s(k)分配給矩陣元素adj_mat(rows(k),cols(k))

由於鄰接矩陣是對稱的,因此A(row,col) = A(col,row) 而不是[rows; cols] [rows; cols] ,可以先創建上三角矩陣,然后添加轉置矩陣以完成對稱矩陣。

A = sparse([rows; cols],[cols; rows],[s; s]);    
full(A)

A = 
   0   3   4   5   0
   3   0   4   7   8
   4   4   0   0   0
   5   7   0   0   0
   0   8   0   0   0

很難說出您的要求。 這是正確的嗎?

list = [1 2 3
1 3 4
1 4 5
2 3 4
2 5 8
2 4 7];


matrix = zeros(max(max(list(:, 1:2))));  %// Or just zeros(5) if you know you want a 5x5 result

matrix(sub2ind(size(matrix), list(:,1), list(:,2))) = list(:,3);  %// Populate the upper half
matrix = matrix + matrix'  %'// Find the lower half via symmetry

matrix =

   0   3   4   5   0
   3   0   4   7   8
   4   4   0   0   0
   5   7   0   0   0
   0   8   0   0   0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM