number of times consecutive values occur

4 views (last 30 days)
I have a row vector (1000 x 1) containing the values of 0 and nonzero values. I would like to find the number of times non-zero value occurs consecutively but with conditions - 2 consecutive of non-zero, 3 consecutive of non-zero, 4 consecutive of non-zero and so on (probably up to 100).
So for example I have X = [ 1 1 1 1 0 1 1 0 1 1 0 1 1 0 0 1 1 1]. The number of times 1 occurs 2-consecutively is 3. The number of times 1 occurs 3-consecutively is 1. The number of times 1 occurs 4-consecutively is 1.
I'm not sure how to tackle this.

Accepted Answer

Stephen23
Stephen23 on 22 Mar 2018
Edited: Stephen23 on 22 Mar 2018
Using basic MATLAB commands:
>> X = [ 1 1 1 1 0 1 1 0 1 1 0 1 1 0 0 1 1 1];
>> D = diff([0,X,0]);
>> V = find(D<0)-find(D>0);
>> U = unique(V) % lengths
U =
2 3 4
>> histc(V,U) % number of occurrences
ans =
3 1 1

More Answers (1)

Jan
Jan on 22 Mar 2018
Edited: Jan on 22 Mar 2018
X = [1 1 1 1 0 1 1 0 1 1 0 1 1 0 0 1 1 1];
[B, N] = RunLength(X);
N(B == 0) = []; % Ignore the zeros
[R, Edge] = histcounts(N, 'BinMethod', 'Integers')
Or with a 2nd RunLength:
[B, N] = RunLength(X);
[V, R] = RunLength(sort(N(B ~= 0)))
Now the V(i) repetitions occurs R(i) times.
If you do not have a C-compiler installed, use RunLength_M from this submission instead.
  3 Comments
Jan
Jan on 27 Mar 2018
@NMans: See the example above. Replace "RunLength" by "RunLength_M".

Sign in to comment.

Categories

Find more on Dates and Time 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!