how to count array of 1 and 0 repeated times
Afficher commentaires plus anciens
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.
Réponses (3)
David Hill
le 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 commentaires
Keaton Looper
le 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
le 18 Mar 2022
Matt J
le 18 Mar 2022
Yes, but I don't. That's why I needed to make up my own data for the example.
Keaton Looper
le 18 Mar 2022
Matt J
le 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
le 18 Mar 2022
Matt J
le 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
le 18 Mar 2022
Keaton Looper
le 18 Mar 2022
Keaton Looper
le 18 Mar 2022
Keaton Looper
le 18 Mar 2022
Matt J
le 18 Mar 2022
[~,~,runlengths]=groupLims(groupTrue(data==1 & visibility<2),1);
count= nnz(runlengths>=10)
Image Analyst
le 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
le 18 Mar 2022
Image Analyst
le 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
le 18 Mar 2022
Modifié(e) : Image Analyst
le 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 commentaire
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]))
Catégories
En savoir plus sur Data Type Conversion dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!