How to count consuctive 0's inbetween values of 1

조회 수: 12 (최근 30일)
Chris E.
Chris E. 2012년 10월 17일
I have really long code that does what I want, but I wanted to try to find a faster code to do this, for loop is taking forever. for example I have a vector of:
count = [0; 1; 0; 0; 0; 1; 0; 1; 1; 1; 0; 0; 0; 1; 0; 1; 1; 0; 0]
What I would like for an answer is the consecutive 0's between the ones... so,
ans =
1
3
1
0
0
3
1
0
2
Here is what I have to do it, (count coming in is the 1 and 0 vector list), the output is "store":
for m = 1:size(count,1)
store = 0;
countlast = 0;
j = 0;
if (sum(count)>=1)
for n = 1:size(count,1)
if count(n) == 0
countlast = countlast + 1;
else
j = j + 1;
store(j) = countlast;
countlast = 0;
end
end
j = j + 1;
store(j) = countlast;
end
end
store'
If there is a faster way of doing this Please help me out! Thanks, Chris

채택된 답변

Kye Taylor
Kye Taylor 2012년 10월 17일
편집: Kye Taylor 2012년 10월 17일
This is a fun one.
Try
count = reshape(count,1,[]); % make it a row vector
store = [nnz(cumsum(count)==0),...
diff(find(count))-1,...
nnz(cumsum(count)==max(cumsum(count)))-1]

추가 답변 (2개)

Sean de Wolski
Sean de Wolski 2012년 10월 17일
v = [0; 1; 0; 0; 0; 1; 0; 1; 1; 1; 0; 0; 0; 1; 0; 1; 1; 0; 0;1];
vzcount = diff(find([1;v;1]))-1; %find ones in a [1;v;1] vector and take the difference -1
%Remove zeros from first or last element
if vzcount(1)==0;
vzcount = vzcount(2:end);
end
if vzcount(end) == 0;
vzcount = vzcount(1:end-1);
end

Derek O'Connor
Derek O'Connor 2012년 10월 18일

카테고리

Help CenterFile Exchange에서 MATLAB에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by