MATLAB中的GROUP BY

时间:2012-01-20 19:30:46

标签: matlab octave

我想做SQL的GROUP BY在MATLAB中做的事情。例如,

M = [
1,5;
 2,5;
3,5;
 1,6;
 2,6;
 1,7]

SQL:SELECT MAX(c1),c2 FROM M(c1,c2)GROUP BY 2

结果= [
3,5;
2,6;
1,7]

我怎样才能在Matlab中做到这一点?

3 个答案:

答案 0 :(得分:4)

统计工具箱中的

grpstats可以执行此操作:

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

ans =

     3     5
     2     6
     1     7

答案 1 :(得分:3)

如果你不介意做一些预处理来获得订单(或者如果第一列从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 :(得分: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