How to count the number of 1 between two 0 in a vector?
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Nicolò Castellani
am 3 Feb. 2020
Bearbeitet: Adam Danz
am 17 Jan. 2021
I have this vector:
[0 1 1 1 0 0 1 0 1 1 0 1]
I want to create a vector that every time that I have 1 or more consecutive 1 it counts the number of 1 between two zero. So the results must be:
[3 1 2 1]
How can I do that?
thanks
0 Kommentare
Akzeptierte Antwort
Adam Danz
am 3 Feb. 2020
Bearbeitet: Adam Danz
am 17 Jan. 2021
In both methods below,
A is the input vector (row or column)
B is the output vector of consecutive 1 counts, row vector.
Method 1 assumes the vector only contains 1s and 0s
A = [0 1 1 1 0 0 1 0 1 1 0 1];
B = diff(find([0,A(:).',0]==0))-1;
B(B==0) = []
Method 2 counts consecutive 1s, other elements can take any numeric value.
A = [0 1 1 1 0 0 1 0 1 1 0 1];
dA = diff([0,A(:).',0]==1);
B = find(dA==-1)-find(dA==1)
0 Kommentare
Weitere Antworten (1)
Sean de Wolski
am 3 Feb. 2020
[regionprops(bwlabel([0 1 1 1 0 0 1 0 1 1 0 1]),'Area').Area]
3 Kommentare
Sean de Wolski
am 4 Feb. 2020
A vector is just a long and skinny image! I find things like bwlabel, bwareaopen, etc. to often be useful for this kind of thing.
Adam Danz
am 4 Feb. 2020
Agreed - I'm relatively new to the bw.... functions but I use bwlabel often. Since it requires access to a toolbox I went with a lower level solution in my answer.
Siehe auch
Kategorien
Mehr zu Other Formats finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!