How to filter out single/double zero's ?
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
A = [1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0]
I have vector A and I want to smoothen the vector by changing the single 0's or double 0's to 1's. This means that I want to keep the consecutive zero's when bigger than 2 consecutive.
Is there an easy way to do this without using a for loop?
Thanks
0 commentaires
Réponse acceptée
Fabio Freschi
le 23 Sep 2019
% find indices
idx1 = strfind([0 A == 0 0],[0 1 0]);
idx2 = strfind([0 A == 0 0],[0 1 1 0]);
% replace
A(idx1) = 1;
A([idx2(:); idx2(:)+1]) = 1;
1 commentaire
Guillaume
le 23 Sep 2019
Note that, while this is a good solution, this usage of strfind with numeric arrays is undocumented. I have suggested to Mathworks to make it documented (or make a function that does the same for numeric vectors), but for now, use at your own perils. It may stop working in future versions.
Plus de réponses (2)
Voir également
Catégories
En savoir plus sur Filter Analysis dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!