How to delete a row if it doesn't follow a pattern
    5 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Sha S
 el 8 de Jul. de 2015
  
    
    
    
    
    Comentada: Sha S
 el 15 de Jul. de 2015
            Hi, I have... a = [ 2 5 1; 3 6 2; 3 4 1; 9 4 2; 8 3 1; 3 2 2; 9 5 2; 4 8 1]
 Notice how the last column follows a pattern of 1, 2,1,2..and so on.
 The 7th row however has a 2 in the last column just like the 6th row before...thus does not follow the pattern. 
 How would I delete the 7th row and any other row if it does not follow the 1,2,1,2 pattern of the last column?
 Thanks.
2 comentarios
  James Tursa
      
      
 el 8 de Jul. de 2015
				Is the pattern always two different numbers alternating? Or could it be something else?
Respuesta aceptada
  Ashmil Mohammed
      
 el 8 de Jul. de 2015
        Try out this code :
    p=size(m,1);%m is your matrix
for i=1:p
    if mod(i,2)==1 &&  m(i,size(m,2))~=mod(i,2)
        m(i,:)=[];
        p=p-1;
    elseif mod(i,2)==0 &&  m(i,size(m,2))~=(mod(i,2)+2)
        m(i,:)=[];
        p=p-1;
    end
end
Más respuestas (2)
  bio lim
      
 el 8 de Jul. de 2015
        a = [ 2 5 1; 3 6 2; 3 4 1; 9 4 2; 8 3 1; 3 2 2; 9 5 2; 4 8 1];
 % First lets remove 2's in a row
ii = 1:2:length(a);
b = a(ii,end)~=1;
a(2*find(b==1)-1, :) = [];
 % Second lets remove 1's in a row
jj = 2:2:length(a);
c = a(jj,end)~=2;
a(2*find(c==1)-1,:) = [];
Output is
 a =
     2     5     1
     3     6     2
     3     4     1
     9     4     2
     8     3     1
     3     2     2
     4     8     1
0 comentarios
  James Tursa
      
      
 el 8 de Jul. de 2015
        
      Editada: James Tursa
      
      
 el 8 de Jul. de 2015
  
      Assuming the pattern in the last column must be 1-2-1-2-...etc exactly
[m,n] = size(a);
expected = 1; % initialize expected value in 1st row
x = false(m,1); % initialize the deletion flag array
for k=1:m
    if( a(k,n) ~= expected )
        x(k) = true; % if not as expected, mark for deletion
    else
        expected = 3 - expected; % if as expected, update expected
    end
end
a(x,:) = []; % delete the unexpected pattern rows
2 comentarios
  James Tursa
      
      
 el 8 de Jul. de 2015
				
      Editada: James Tursa
      
      
 el 8 de Jul. de 2015
  
			Note: My answer and coffee's answer differ in how they treat a matrix that starts with a 2 in the last column of row 1 (and potentially the adjacent rows). My answer will delete all beginning rows until a 1 is found. coffee's answer does something different. If you want to allow beginning with a 1 or a 2, alter the expected initialization line as follows (assumes a(1,n) has to be either a 1 or a 2 and can't be anything else):
expected = a(1,n); % initialize expected value in 1st row
Ver también
Categorías
				Más información sobre File Operations 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!



