[英]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.