How to count the number of consecutive numbers of the same value in an array
56 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Gareth Pritchard
am 24 Feb. 2014
Kommentiert: Emil Jensen
am 10 Mär. 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 Kommentare
Akzeptierte Antwort
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{:})
2 Kommentare
Weitere Antworten (2)
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));
0 Kommentare
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);
Siehe auch
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!