Finding the numbers of a vector with the same length?

Dear all
Assuming there is a vector consisting only 0 and 1 like:
x=[0 1 1 0 1 0 0 1 1 1 0 1 0 1 1 1 0 1 1 0 1 1 0 1]
I want to figure out how many times 1 or 1 1 or 1 1 1 or even longer 1 in a row exists are in this vector?
The solution here would be:
nr_1= 3
nr_1_1= 3
nr_1_1_1= 2
nr_1_1_1_1 = 0
....
Is there a easy way to do it?
Thanks for your help
(Matlab 2010a)

 Respuesta aceptada

C.J. Harris
C.J. Harris el 14 de Nov. de 2012
rep=diff(find(diff([-Inf x Inf])));
val=x(cumsum(rep));
out = hist(rep(val == 1), max(rep));

2 comentarios

Boris
Boris el 15 de Nov. de 2012
The main disadvantages about this solution is, that you will get a lot of zeros in the out-vector. Otherwise, it works well. Thanks a lot
You can process the out data if you want to remove the zeros, for example:
[out(find(out ~= 0)); find(out ~= 0)]
This will then show occurrences (top row) and sequence length (bottom row).

Iniciar sesión para comentar.

Más respuestas (2)

Matt Fig
Matt Fig el 14 de Nov. de 2012
Editada: Matt Fig el 14 de Nov. de 2012
Here's another solution:
D = diff(find([1 ~x 1]))-1;
D = histc(D,1:max(D))

2 comentarios

+1
Boris
Boris el 15 de Nov. de 2012
Works well. Thanks a lot.

Iniciar sesión para comentar.

Harshit
Harshit el 14 de Nov. de 2012

0 votos

Hi,
You can save zero as it is and whenever 1 appears start a counter and count the number of 1s in succession. It is Run length encoding. When done just count the number of times the numbers appears.

Categorías

Etiquetas

Preguntada:

el 14 de Nov. de 2012

Community Treasure Hunt

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

Start Hunting!

Translated by