Retrieving minimum values for parts of a matrix

1 view (last 30 days)
Hi, I have a matrix containing different rows with values for several years. I need to retrieve the minimum value corresponding to each year. For example: A=[ 1958 2; 1958 3; 1959 4; 1959 5; 1959 6 ] The result matrix that I need would be: B=[ 1958 2; 1959 4 ]
Could you please help with this? Thanks

Accepted Answer

Azzi Abdelmalek
Azzi Abdelmalek on 17 May 2016
Edited: Azzi Abdelmalek on 17 May 2016
A=[ 1958 2; 1958 3; 1959 4; 1959 5; 1959 6 ]
[ii,jj,kk]=unique(A(:,1))
out=[ii accumarray(kk,(1:numel(kk))',[],@(x) min(A(x,2)))]

More Answers (1)

Matt J
Matt J on 17 May 2016
Edited: Matt J on 17 May 2016
[i,~,s]=find( accumarray(A(:,1), A(:,2),[],@min ) );
B=[i,s]
  1 Comment
Matt J
Matt J on 17 May 2016
Edited: Matt J on 17 May 2016
You can be a bit more memory-conservative by making modifications like this,
[i,j,s]=find( accumarray(A(:,1)-1949, A(:,2),[],@min ) );
B=[i+1949,s]

Sign in to comment.

Categories

Find more on Develop Apps Using App Designer in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!