How to count the number of consecutive numbers of the same value in an array
    22 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Gareth Pritchard
 el 24 de Feb. de 2014
  
    
    
    
    
    Comentada: Emil Jensen
 el 10 de Mzo. de 2020
            I have an array given as
x = [1 1 1 2 2 1 1 1]
I'd like to know a way I could go through each individual element in the array, and getting a value for how many steps the number stays at the same value. For instance, for this example, the output I would be looking for would be
y = [2 1 0 1 0 2 1 0]
Where the first value of 1 stays constant for another 2 steps, the second stays constant for one more step etc.
0 comentarios
Respuesta aceptada
  Jos (10584)
      
      
 el 24 de Feb. de 2014
        % data
  x = [1 1 1 2 2 1 1 1 3 3 3 3 3 5]
% engine
  i = find(diff(x)) 
  n = [i numel(x)] - [0 i]
  c = arrayfun(@(X) X-1:-1:0, n , 'un',0)
  y = cat(2,c{:})
2 comentarios
Más respuestas (2)
  Andrei Bobrov
      
      
 el 25 de Feb. de 2014
        c = [1 1 1 2 2 1 1 1];
v = numel(c):-1:1;
ii = [true,diff(c)~=0];
n = v(ii);
t = [n(2:end)+1,1];
out = v - t(cumsum(ii));
0 comentarios
  Roger Stafford
      
      
 el 24 de Feb. de 2014
        Here's a slightly different way:
 x = [2 2 5 5 5 6 6 6 6 4 7 2 2 2];
 n = size(x,2);
 f = find([true,diff(x)~=0,true]);
 y = zeros(1,n);
 y(f(1:end-1)) = diff(f);
 y = cumsum(y(1:n))-(1:n);
Ver también
Categorías
				Más información sobre Matrices and Arrays 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!




