Finding sequences and choose first one from that sequence
4 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
GMDI
am 15 Feb. 2019
Kommentiert: GMDI
am 17 Feb. 2019
I have a matrix like this :
A=[1 7; 1 8; 2 2; 2 3; 2 4; 2 8; 4 3; 4 4; 4 5; 4 6];
I want to find a matrix (say B) from A as like bellow:
B= [1 7; 2 2; 2 8; 4 3];
That means, if there is a sequence (not sure if this si the exact word to describe the problem!) in the second column of A, then I want only first element of this sequence. For example: I have 1 7 and 1 8 in A..so I want 1 7. Similarly; I have 2 2; 2 3; 2 4; 2 8..so from here I want 2 2 and 2 8. Finally, for 4 3; 4 4; 4 5; 4 6--I want 4 3.
1 Kommentar
Kevin Phung
am 15 Feb. 2019
Bearbeitet: Kevin Phung
am 15 Feb. 2019
"For example: I have 1 7 and 1 8 in A..so I want 1 7. Similarly; I have 2 2; 2 3; 2 4; 2 8..so from here I want 2 2 and 2 8. "
This is very contradicting...if youre only taking the first value for each sequence, why are you taking 2 8?
shouldn't your expected result be:
B = [1 7; 2 2; 4 3]?
Akzeptierte Antwort
Cris LaPierre
am 15 Feb. 2019
I agree, it was a bit confusing at first. Group by the first column and then by the max of the diff of values in the second column or 1.
To handle the case where there is a single row in a group ([2,8]), I had to specify min as an anonymous fxn so that I could specify the direction.
A=[1 7; 1 8; 2 2; 2 3; 2 4; 2 8; 4 3; 4 4; 4 5; 4 6];
G = findgroups(A(:,1),[1;max(1,diff(A(:,2)))])
f = @(x) min(x,[],1)
B = splitapply(f,A,G)
B = 4×2
1 7
2 2
2 8
4 3
Weitere Antworten (2)
Cris LaPierre
am 17 Feb. 2019
Bearbeitet: Cris LaPierre
am 17 Feb. 2019
Simplifying somewhat. Try this
% find magnitude of largest number in column 1
multFac = 10^ceil(log10(max(A(:,1))))
% Plan is to combine the 2 columns with multFac*A(:,1) + A(:,2), essentially grouping them by column 1.
% Take the difference, and remove any rows with sequential values (diff==1)
% This leaves the first value of each sequence
idx = diff(multFac*[0;A(:,1)]+[0;A(:,2)])~=1;
B = A(idx==1,:)
B = 17×2
1 15
1 21
2 8
10 11
10 15
16 15
19 20
19 24
19 28
20 4
22 9
22 15
31 16
37 24
61 26
64 10
76 18
Siehe auch
Kategorien
Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!