从 4x6 矩阵创建邻接矩阵

Creating adjacency matrix from 4x6 matrix

我有一个类似于以下示例的 4x6 矩阵(有向网络):所以第一列代表个人,每一行代表个人与其他个人的友谊所以第一行代表个人 1与 2 和 5 的友谊以及类似的第 3 行代表个人 5 与个人 2 和 6 的友谊。零没有意义。

[ 1 2 0 5 0 0; 
  2 1 0 0 5 6; 
  5 2 6 0 0 0; 
  6 1 2 0 0 5; ]

所以现在因为有四个人 我想要 **4x4 邻接矩阵 表示友谊,意思是 0 表示没有友谊,1 表示友谊**。因此,下面的第一行代表个人 1 与 2,5 的友谊为 1,表示他们是朋友,0 表示 6 他们不是朋友。类似地,第二行代表友谊个体 2,其中 1,5 和 6 为 1,表示 he/she 是所有个体的朋友。

[ 0 1 1 0; 
  1 0 1 1;  
  0 1 0 1; 
  1 1 1 0; ]

那么如何在 MATLAB 中得到这个矩阵呢?

最直接的方法是修改找到的答案:

A = [1 2 0 5 0 0; 
     2 1 0 0 5 6; 
     5 2 6 0 0 0; 
     6 1 2 0 0 5];

adjMat = zeros(max(A(:)));   % create full 6x6 matrix, then chop it down
for ind = 1:size(A,1)
    % Flag 1 on each row 'ind' at the indices mentioned in col 2-5
    adjMat(A(ind,1), nonzeros(A(ind,2:end))) = 1;
end
% use only rows/columns with indices in first column of A
adjMat = adjMat(A(:,1), A(:,1));

如果你想使用完整的 6x6 矩阵,只需在最后一行之前停止,或者使用 6x6 输入矩阵,在不需要的行中使用零(在这种情况下,最后一行也是不必要的)。