Я хочу сделать то, что GROUP BY в SQL делает в MATLAB.Например,
M = [ 1, 5; 2, 5; 3, 5; 1, 6; 2, 6; 1,7]
SQL: ВЫБРАТЬ МАКС. (C1), c2 ОТ M (c1, c2)GROUP BY 2
Результат = [ 3, 5; 2, 6; 1, 7]
Как я могу сделать это в Matlab?
grpstats в панели инструментов статистики может сделать это:
grpstats
>> [grpstats(M(:,1), M(:,2), {'max'}) unique(M(:,2))] ans = 3 5 2 6 1 7
Если вы не возражаете против некоторой предварительной обработки, чтобы получить заказ (или если первый столбец построен правильно от 1 до n), вы можете сделать это следующим образом:
n
accumarray([1 2 3 1]',[11 12 13 14]',[],@max)
Это даст:
14 12 13
Или в вашем случае:
accumarray(M(:,1),M(:,2),[],@max)
Обратите внимание на порядок. Второе число, например, будет соответствовать M(:,1) == 2
M(:,1) == 2
Я думаю, что есть простое решение для этого. Вот что я тестировал на Matlab, и он работал:
>> M = [ 1, 5; 2, 5; 3, 5; 1, 6; 2, 6; 1,7 ]; >> grpstats(M,M(:,2),{'max'}) ans = 3 5 2 6 1 7