Найти наиболее повторяющуюся строку в матрице MATLAB - PullRequest
5 голосов
/ 24 января 2011

Я ищу функцию для поиска наиболее повторяющихся (то есть модальных) строк матрицы в MATLAB.Что-то вроде:

>> A = [0, 1; 2, 3; 0, 1; 3, 4]

A =

 0     1
 2     3
 0     1
 3     4

Затем выполнение:

>> mode(A, 'rows')

вернет [0, 1], в идеале со вторым выводом, дающим индексы, где произошла эта строка (то есть [1, 3]'.)

Кто-нибудь знает о такой функции?

Ответы [ 2 ]

13 голосов
/ 24 января 2011

Вы можете использовать UNIQUE , чтобы получить уникальные индексы строк, а затем вызвать MODE для них.

[uA,~,uIdx] = unique(A,'rows');
modeIdx = mode(uIdx);
modeRow = uA(modeIdx,:) %# the first output argument
whereIdx = find(uIdx==modeIdx) %# the second output argument
2 голосов
/ 07 ноября 2011

Ответ может быть неверным.Попробуйте A = [2, 3;0, 1;3, 4;0, 1].Должно быть следующее:

[a, b, uIdx] = unique(A,'rows');
modeIdx = mode(uIdx);
modeRow = a(modeIdx,:) %# the first output argument
whereIdx = find(ismember(A, modeRow, 'rows'))  %# the second output argument
...