在给定类标签列表的情况下查找邻接矩阵

时间:2015-02-02 10:58:00

标签: matlab adjacency-matrix

我有一个列表L列出同一类的项目,L = [1 1 1 0 0 1 1] 我想构建邻接矩阵' A'使用列表L而不是 使用任何for循环,

A = [1 1 1 0 0 0 0;
     1 1 1 0 0 0 0;
     1 1 1 0 0 0 0;
     0 0 0 0 0 0 0
     0 0 0 0 0 0 0;
     0 0 0 0 0 1 1;
     0 0 0 0 0 1 1; ]

你能帮忙吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

也许这就是你想要的:

A = zeros(numel(L));
A(logical(L),logical(L)) = 1;

您的示例中的结果是

A =
     1     1     1     0     0     1     1
     1     1     1     0     0     1     1
     1     1     1     0     0     1     1
     0     0     0     0     0     0     0
     0     0     0     0     0     0     0
     1     1     1     0     0     1     1
     1     1     1     0     0     1     1

更一般地说:假设您有L = [1 1 1 0 0 2 2],其中每个数字表示不同的类,并且零不计数。在这种情况下

A = bsxfun(@eq,L,L.');
A(~L,~L) = 0;

给出了

A =
     1     1     1     0     0     0     0
     1     1     1     0     0     0     0
     1     1     1     0     0     0     0
     0     0     0     0     0     0     0
     0     0     0     0     0     0     0
     0     0     0     0     0     1     1
     0     0     0     0     0     1     1