How to keep rows whose values follow a certain sequence?
    7 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Lu Da Silva
 el 3 de Feb. de 2022
  
    
    
    
    
    Comentada: Stephen23
      
      
 el 3 de Feb. de 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 comentarios
  Stephen23
      
      
 el 3 de Feb. de 2022
				
      Editada: Stephen23
      
      
 el 3 de Feb. de 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.
Respuesta aceptada
  Stephen23
      
      
 el 3 de Feb. de 2022
        
      Editada: Stephen23
      
      
 el 3 de Feb. de 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 comentarios
Más respuestas (1)
  David Hill
      
      
 el 3 de Feb. de 2022
        s=strfind(num2str(yourMatrix(:,1))','123');
newMatrix=[];
for k=1:length(s)
  newMatrix=[newMatrix;yourMatrix(s(k):s(k)+2,:)];
end
2 comentarios
  David Hill
      
      
 el 3 de Feb. de 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
Ver también
Categorías
				Más información sobre Logical en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


