Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

GROUP BY in MATLAB

Tags:

matlab

octave

I want to do what SQL's GROUP BY does in MATLAB. For example,

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

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

How can I do this in Matlab?

like image 222
Gjorgji Avatar asked Jan 20 '12 19:01

Gjorgji


2 Answers

grpstats in the Statistics Toolbox can do this:

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

ans =

     3     5
     2     6
     1     7
like image 124
John Colby Avatar answered Sep 26 '22 02:09

John Colby


If you don't mind doing some preprocessing to get the order (or if the first column is nicely built from 1 to n), you can do it like this:

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

This will give:

14
12
13

Or in your case:

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

Note the order. The second number for example, will correspond to M(:,1) == 2

like image 29
Dennis Jaheruddin Avatar answered Sep 27 '22 02:09

Dennis Jaheruddin