如何在matlab中给出一组链接和边缘找到邻接矩阵

时间:2016-10-20 10:22:55

标签: arrays matlab matrix graph-theory adjacency-matrix

我有所有边的矢量,例如

A = [1;2;3;4];

我还有连接这些边缘的所有链接的矩阵,例如边缘数字

B = [1 3;3 1;1 2;1 2;2 3;4 3];

我想用这些数据构建邻接矩阵。矩阵不应考虑链路中边缘的排序。例如,第二个链路具有边缘1 2,但矩阵应在1,2和2,1中都有条目。 所以我需要像这样的输出

C = [0 1 1 0;1 0 1 0;1 1 0 1;0 0 1 0];
除了对B的大小使用for循环然后在B中找到每个链接的egdes然后在i,j处添加1到预先初始化的4x4矩阵之外,我想不出任何其他方式。其中i,j是链接边缘。

这是一种有效的方式吗,因为我的实际尺寸大于4?有人可以用更好的方法构建矩阵吗?

1 个答案:

答案 0 :(得分:2)

您可以使用sparse构建矩阵,然后可以选择转换为full

result = full(sparse(B(:,1), B(:,2), 1)); % accumulate values
result = result | result.'; % make symmetric with 0/1 values

等效地,您可以使用accumarray

result = accumarray(B, 1); % accumulate values
result = result | result.'; % make symmetric with 0/1 values

对于A = [1;2;3;4]; B = [1 3;3 1;1 2;1 2;2 3;4 3],上述任何一个都给出了

result =
  4×4 logical array
   0   1   1   0
   1   0   1   0
   1   1   0   1
   0   0   1   0