[英]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)
現在, rows
, cols
和s
包含所需的信息。 稀疏矩陣需要三個向量。 兩個第一個向量的每一行, rows
和cols
是s
的同一行中給出的值的索引(即權重)。
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.