How to count consuctive 0's inbetween values of 1

5 views (last 30 days)
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

Accepted Answer

Kye Taylor
Kye Taylor on 17 Oct 2012
Edited: Kye Taylor on 17 Oct 2012
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]

More Answers (2)

Sean de Wolski
Sean de Wolski on 17 Oct 2012
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 on 18 Oct 2012

Categories

Find more on Data Type Conversion 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!