给定 class 标签列表查找邻接矩阵

Find adjacency matrix given a list of class labels

我有一个属于相同 class 的项目列表 L,L = [1 1 1 0 0 1 1] 我想使用列表 L 而不是构建邻接矩阵 'A' 使用任何 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; ]

你能帮忙吗?

谢谢!!

也许这就是你想要的:

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],其中每个数字表示不同的 class,零不算。在这种情况下

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