How to count the number of consecutive numbers of the same value in an array
    22 views (last 30 days)
  
       Show older comments
    
    Gareth Pritchard
 on 24 Feb 2014
  
    
    
    
    
    Commented: Emil Jensen
 on 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 Comments
Accepted Answer
  Jos (10584)
      
      
 on 24 Feb 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 Comments
More Answers (2)
  Andrei Bobrov
      
      
 on 25 Feb 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 Comments
  Roger Stafford
      
      
 on 24 Feb 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);
See Also
Categories
				Find more on Matrices and Arrays in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



