How to count the number of 1 between two 0 in a vector?

3 vues (au cours des 30 derniers jours)
Nicolò Castellani
Nicolò Castellani le 3 Fév 2020
Modifié(e) : Adam Danz le 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

Réponse acceptée

Adam Danz
Adam Danz le 3 Fév 2020
Modifié(e) : Adam Danz le 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) = []
B = 1×4
3 1 2 1
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)
B = 1×4
3 1 2 1

Plus de réponses (1)

Sean de Wolski
Sean de Wolski le 3 Fév 2020
[regionprops(bwlabel([0 1 1 1 0 0 1 0 1 1 0 1]),'Area').Area]
  3 commentaires
Sean de Wolski
Sean de Wolski le 4 Fév 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
Adam Danz le 4 Fév 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.

Connectez-vous pour commenter.

Community Treasure Hunt

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

Start Hunting!

Translated by