How to filter out single/double zero's ?

1 回表示 (過去 30 日間)
JamJan
JamJan 2019 年 9 月 23 日
コメント済み: Guillaume 2019 年 9 月 23 日
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

採用された回答

Fabio Freschi
Fabio Freschi 2019 年 9 月 23 日
% 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 件のコメント
Guillaume
Guillaume 2019 年 9 月 23 日
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.

サインインしてコメントする。

その他の回答 (2 件)

Matt J
Matt J 2019 年 9 月 23 日
編集済み: Matt J 2019 年 9 月 23 日
B=char([1 A 1]+'0');
B=strrep(B, '101','111');
B=strrep(B,'1001','1111');
B=B(2:end-1)-'0';

Guillaume
Guillaume 2019 年 9 月 23 日
If you have the Image Processing Toolbox, the easiest is:
newA = imclose(A, [1 1 1])

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by