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)

 채택된 답변

C.J. Harris
C.J. Harris 2012년 11월 14일
rep=diff(find(diff([-Inf x Inf])));
val=x(cumsum(rep));
out = hist(rep(val == 1), max(rep));

댓글 수: 2

Boris
Boris 2012년 11월 15일
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).

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Matt Fig
Matt Fig 2012년 11월 14일
편집: Matt Fig 2012년 11월 14일
Here's another solution:
D = diff(find([1 ~x 1]))-1;
D = histc(D,1:max(D))
Harshit
Harshit 2012년 11월 14일

0 개 추천

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.

카테고리

도움말 센터 및 File Exchange에서 Logical에 대해 자세히 알아보기

질문:

2012년 11월 14일

Community Treasure Hunt

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

Start Hunting!

Translated by