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

1 次查看(过去 30 天)
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!

采纳的回答

Guillaume
Guillaume 2016-10-17
编辑:Guillaume 2016-10-17
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

更多回答(2 个)

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

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

类别

Help CenterFile Exchange 中查找有关 String Parsing 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by