How to count the number of consecutive numbers of the same value in an array
    22 vues (au cours des 30 derniers jours)
  
       Afficher commentaires plus anciens
    
    Gareth Pritchard
 le 24 Fév 2014
  
    
    
    
    
    Commenté : Emil Jensen
 le 10 Mar 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 commentaires
Réponse acceptée
  Jos (10584)
      
      
 le 24 Fév 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 commentaires
Plus de réponses (2)
  Andrei Bobrov
      
      
 le 25 Fév 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 commentaires
  Roger Stafford
      
      
 le 24 Fév 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);
Voir également
Catégories
				En savoir plus sur Matrices and Arrays dans Help Center et File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!