How to keep rows whose values follow a certain sequence?
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Lu Da Silva
am 3 Feb. 2022
Kommentiert: Stephen23
am 3 Feb. 2022
I have a matrix composed of two columns A and B, I need to only keep the rows which contain the sequence 90-180-270:
A B A B
-------- ----------
90 1 90 1
180 9 180 9
270 2 270 2
90 0 -> 90 0
270 3 180 4
90 0 270 6
180 4
270 6
How can I implement this into a Matlab code?
5 Kommentare
Stephen23
am 3 Feb. 2022
Bearbeitet: Stephen23
am 3 Feb. 2022
"It only includes three possible numbers: 180, 270 and 90. (I wrote 1 2 3 for simplicity reasons)."
It is more complex and slower. Because solutions that work with 1-2-3 might not work with other values. But because you gave us incorrect information we all spend our time developing solutions that might not suit your needs at all.
You should tell us the exact values and the exact order.
Akzeptierte Antwort
Stephen23
am 3 Feb. 2022
Bearbeitet: Stephen23
am 3 Feb. 2022
Here is an old MATLAB trick that you can use, which still works today:
Where M is your matrix and S is the desired sequence:
S = [90,180,270]; % the required sequence
M = [90,1;180,9;270,2;90,0;270,3;90,0;180,4;270,6]
X = strfind(M(:,1).',S);
Y = X-1+(1:numel(S)).';
Z = M(Y,:)
3 Kommentare
Weitere Antworten (1)
David Hill
am 3 Feb. 2022
s=strfind(num2str(yourMatrix(:,1))','123');
newMatrix=[];
for k=1:length(s)
newMatrix=[newMatrix;yourMatrix(s(k):s(k)+2,:)];
end
2 Kommentare
David Hill
am 3 Feb. 2022
This should work.
r=yourMatrix(:,1);
r(r==90)=1;r(r==180)=2;r(r==270)=3;%change based on sequence desired
f=strfind(num2str(r)','123');
newMatrix=[];
for k=1:length(f)
newMatrix=[newMatrix;yourMatrix(f(k):f(k)+2,:)];
end
Siehe auch
Kategorien
Mehr zu Logical 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!