how to count array of 1 and 0 repeated times
Show older comments
I am tryig to make a counter that will look at a set of data that consists of ones and zeros and count how many times the number 1 is repeated 10 times consecutively and count that occurence as a 1 and any other occurence of a zero or less than 10 times as a zero.
Answers (3)
David Hill
on 17 Mar 2022
a=ones(1,10);
b=[];
for k=1:10
b=[b,randi(2,1,20)-1,a];
end
% above just generates binary series
s=num2str(b);
s=s(s~=' ');
count=length(regexp(s,'[1]{10,}'));
Using,
[~,~,runlengths]=groupLims(groupTrue(data==1),1);
count= nnz(runlengths>=10)
18 Comments
Keaton Looper
on 18 Mar 2022
Possibly because you didn't download them? Here's an example,
e=ones(1,10);
data=[e,0,0,e 1 0 0 0 1 1];
[~,~,runlengths]=groupLims(groupTrue(data==1),1);
count= nnz(runlengths>=10)
Keaton Looper
on 18 Mar 2022
Matt J
on 18 Mar 2022
Yes, but I don't. That's why I needed to make up my own data for the example.
Keaton Looper
on 18 Mar 2022
Matt J
on 18 Mar 2022
Yes, or you could just do as below, although I would advise you not to name your variable 'diff' since it conflicts with an existing Matlab function.
[~,~,runlengths]=groupLims(groupTrue(diff==1),1);
count= nnz(runlengths>=10)
Keaton Looper
on 18 Mar 2022
Matt J
on 18 Mar 2022
and if the respective visibility value is less than 2 miles
I don't think you've told us what this is.
Keaton Looper
on 18 Mar 2022
Keaton Looper
on 18 Mar 2022
Keaton Looper
on 18 Mar 2022
Keaton Looper
on 18 Mar 2022
Matt J
on 18 Mar 2022
[~,~,runlengths]=groupLims(groupTrue(data==1 & visibility<2),1);
count= nnz(runlengths>=10)
Image Analyst
on 18 Mar 2022
"some of the functions don't work " <== if you don't want to use a File Exchange program and want to use a built-in function that will do it in a single line of code, see my answer below.
Keaton Looper
on 18 Mar 2022
Image Analyst
on 18 Mar 2022
I gave an example below where I prove it worked. If it doesn't work for your vector, attach your vector in a text or mat file.
Image Analyst
on 18 Mar 2022
Edited: Image Analyst
on 18 Mar 2022
If you have the Image Processing Toolbox, you can use the built-in bwlabel and do it in one line of code. If m is your matrix:
[~, count] = bwlabel(bwareafilt(logical(m), [10, inf]))
1 Comment
Here is an example
m = zeros(1, 1000);
% Make 3 stretches of 10 or more:
m(100:110) = 1;
m(330:380) = 1;
m(560:590) = 1;
[~, count] = bwlabel(bwareafilt(logical(m), [10, inf]))
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!