Filter löschen
Filter löschen

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

56 Ansichten (letzte 30 Tage)
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.

Akzeptierte Antwort

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

Weitere Antworten (2)

Andrei Bobrov
Andrei Bobrov am 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 am 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);
  1 Kommentar
Gareth Pritchard
Gareth Pritchard am 25 Feb. 2014
This also works great, thank you. Is there any way you could explain line by line what it is doing at all?

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by