How to count the number of consecutive numbers of the same value in an array

20 views (last 30 days)
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.

Accepted Answer

Jos (10584)
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{:})

More Answers (2)

Andrei Bobrov
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));

Roger Stafford
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);

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!