Создание матрицы индикаторов на основе вектора с идентификаторами групп - PullRequest
1 голос
/ 07 октября 2019

У меня есть вектор идентификаторов группы:

groups = [ 1 ; 1; 2; 2; 3];

, который я хочу использовать для создания матрицы, состоящей из 1, если i-й и j-й элементы находятся в одной группе,и 0 в противном случае. В настоящее время я делаю это следующим образом:

n = size(groups, 1);
indMatrix = zeros(n,n);
for i = 1:n
    for j = 1:n
        indMatrix(i,j) = groups(i) == groups(j);
    end  
end
indMatrix

indMatrix =

 1     1     0     0     0
 1     1     0     0     0
 0     0     1     1     0
 0     0     1     1     0
 0     0     0     0     1

Есть ли лучшее решение, позволяющее избежать неприятного двойного цикла? Спасибо!

1 Ответ

2 голосов
/ 07 октября 2019

Это можно сделать довольно просто, используя неявное одноэлементное расширение , для R2016b или новее:

indMatrix = groups==groups.';

Для версий MATLAB до R2016b вам необходимо bsxfunдля достижения одноэлементного расширения:

indMatrix = bsxfun(@eq, groups, groups.');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...