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)];

Categories

Find more on Mathematics in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!