GROUP BY в MATLAB - PullRequest
       2

GROUP BY в MATLAB

7 голосов
/ 20 января 2012

Я хочу сделать то, что 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?

Ответы [ 3 ]

4 голосов
/ 20 января 2012

grpstats в панели инструментов статистики может сделать это:

>> [grpstats(M(:,1), M(:,2), {'max'}) unique(M(:,2))]

ans =

     3     5
     2     6
     1     7
3 голосов
/ 04 сентября 2013

Если вы не возражаете против некоторой предварительной обработки, чтобы получить заказ (или если первый столбец построен правильно от 1 до n), вы можете сделать это следующим образом:

accumarray([1 2 3 1]',[11 12 13 14]',[],@max)

Это даст:

14
12
13

Или в вашем случае:

accumarray(M(:,1),M(:,2),[],@max)

Обратите внимание на порядок. Второе число, например, будет соответствовать M(:,1) == 2

2 голосов
/ 04 сентября 2013

Я думаю, что есть простое решение для этого. Вот что я тестировал на 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
...