checking for dependency in the previous row?
    4 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    abhisrisai
 el 10 de Jul. de 2019
  
    
    
    
    
    Comentada: abhisrisai
 el 11 de Jul. de 2019
            Hi, 
My doubt is regarding accessing the previous 'n' rows, but the catch is, that 'n' is not constant or predefined. 
For example : 
A = [1 2 3  4; 5 6 7 8; 1 2 3 4; 1 2 3 4; 9 10 11 12]
I want to check for how many previous 'n' rows am I obtaining the same value continiously. In the above example, I know that for the 4th row, I'm getting the same number pattern in the third row. But later from my simulations which contains more than 5000 rows, I might obtain a same value for more than 10 rows continously and a few rows later, might see the same pattern but this time for 6 rows. I have to manually count them everytime. 
How can I do this through matlab? 
Thank you for the help. 
3 comentarios
Respuesta aceptada
  Adam Danz
    
      
 el 10 de Jul. de 2019
        
      Editada: Adam Danz
    
      
 el 10 de Jul. de 2019
  
      Here's a demo that counts the consecutive rows of "data" (a matrix) that match "key" (a row vector).  The variable "consecutiveCounter" is the output and is concatenated to the end of the data matrix.
% Produce demo data
data = [
    1     2     3     4
    5     6     7     8
    1     2     3     4
    1     2     3     4
    9    10    11    12
    1     2     3     4
    1     2     3     4
    1     2     3     4
    1     2     3     4
    9    10    11    12
    9    10    11    12
    0     0     0    0];
key = [1,2,3,4]; 
keyMatch = all(data == key,2);
dMatch = diff([false; keyMatch==1; false]);
S1 = find(dMatch == 1);  % start indices of these sequences
S2 = find(dMatch == -1); % end indices
idxCell = arrayfun(@(x1,x2)((x1:x2-1)-x1+1)',S1,S2,'UniformOutput',false);
consecutiveCounter = zeros(size(keyMatch)); 
consecutiveCounter(keyMatch==1) = cell2mat(idxCell); 
% If you want to add that as a 5th column, 
dataNew = [data, consecutiveCounter]; 
Result
dataNew =
     1     2     3     4     1
     5     6     7     8     0
     1     2     3     4     1
     1     2     3     4     2
     9    10    11    12     0
     1     2     3     4     1
     1     2     3     4     2
     1     2     3     4     3
     1     2     3     4     4
     9    10    11    12     0
     9    10    11    12     0
     0     0     0     0     0
Más respuestas (0)
Ver también
Categorías
				Más información sobre Matrix Indexing en Help Center y File Exchange.
			
	Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

