How can I find MIN value with same number in the other column?

1 view (last 30 days)
Hi, This one is really tricky.
I have a matrix like below:
A=[
1,1;
1,2;
1,3;
2,4;
2,5;
2,6;
3,7;
3,8;
3,9;
2,10;
2,11;
2,12;
1,13;
1,14;
1,15;]
I want to fine Min of each (1,2,3,2,1) groups. Therefore, the answer I want to get is, [
1,1;
2,4;
3,7;
2,10;
1,13]
I tried using unique function but I couldn't solve problem because there are 2 separate groups of 1 and 2.
Please help me and thank you very much!

Accepted Answer

Guillaume
Guillaume on 17 Oct 2016
Edited: Guillaume on 17 Oct 2016
Here is one way of doing it:
A=[1,1;
1,2;
1,3;
2,4;
2,5;
2,6;
3,7;
3,8;
3,9;
2,10;
2,11;
2,12;
1,13;
1,14;
1,15;]
runlengths = diff([0; find(diff(A(:, 1))); size(A, 1)]); %find length of each run of consecutive numbers
rowids = repelem((1:numel(runlengths))', runlengths); %assign unique ids to each run
[A(cumsum(runlengths), 1), accumarray(rowids, A(:, 2), [], @min)] %use accumarray to find the minimum per rowid

More Answers (2)

Tony Castillo
Tony Castillo on 17 Oct 2016
I think you should try it on this way A2= min (A)

Andrei Bobrov
Andrei Bobrov on 17 Oct 2016
ii = diff([~A(1);A(:,1)])~=0;
out = [A(ii,1), accumarray(cumsum(ii),A(:,2),[],@min)];

Tags

Community Treasure Hunt

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

Start Hunting!