我想做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中做到这一点?
答案 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