Создание матрицы смежности из матрицы 4х6 - PullRequest
0 голосов
/ 28 августа 2018

У меня есть матрица 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, означающий, что он / она дружит со всеми людьми.

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

Так как я могу получить эту матрицу в MATLAB?

1 Ответ

0 голосов
/ 29 августа 2018

Самый простой подход - изменить найденный ответ здесь :

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 с нулями в нежелательных строках (в этом случае последняя строка снова не нужна).

...