Deleting runs of zeros

1 回表示 (過去 30 日間)
Lauren
Lauren 2015 年 5 月 14 日
コメント済み: Lauren 2015 年 5 月 14 日
Hello! I have a dataset that occasionally has runs of zeros. I would like to delete those runs from my data. How do I state that for any run of 3 or more zeros in my data, I would like Matlab to completely delete those observations from my dataset.
So for example, I have a dataset that looks like
[1 5;2 7;3 0;4 0;5 0;6 3]
I would like the that run of zeros deleted so that my new dataset looks like...
[1 5;2 7;6 3]
Any help is greatly appreciated!!

採用された回答

Guillaume
Guillaume 2015 年 5 月 14 日
one possible way, use strfind (which works with numbers despite the name). Using a more complex example (to show that it works regardless of the numbers of 0 in the run):
data = [1 5; 2 0; 3 0; 4 2; 5 3; 6 0; 7 0; 8 0; 9 0; 10 1; 11 0; 12 0; 13 0]
startseq = strfind(data(:, 2)', [0 0 0]);
toremove = unique([startseq, startseq+1, startseq+2]);
data(toremove, :) = []
  1 件のコメント
Lauren
Lauren 2015 年 5 月 14 日
Thank you very much!

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

その他の回答 (2 件)

Doug
Doug 2015 年 5 月 14 日

a = [1 5;2 7;3 0;4 0;5 0;6 3];

i = a(:,2)~=0;

a = a(i,:);

  1 件のコメント
Lauren
Lauren 2015 年 5 月 14 日
This code removes all zeros from my dataset. I only want to remove runs of 3 or more consecutive zeros. Can you modify this code to reflect that?

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


Joseph Cheng
Joseph Cheng 2015 年 5 月 14 日
you would find the indexes that equal zero then if the number is greater or equal to three then delete them from original like in the example below;
x = [1 5;2 7;3 0;4 0;5 0;6 3]
[r c v]=find(x==0);
if numel(r)>=3
x(r,:)=[];
end
  2 件のコメント
Stephen23
Stephen23 2015 年 5 月 14 日
@ Joseph Cheng: do not put empty lines in your code, and then this page will format the entire code in one box.
Also while this certainly detects zeros, it does not detect runs of zeros, which by definition must be consecutive. This code does not resolve this issue.
Joseph Cheng
Joseph Cheng 2015 年 5 月 14 日
?when did the page layout change? oh and yes i didn't see the comment on runs of zeros. However quick modification of taking the diff of r (diff(r)) and looking for values of 1, one can determine runs of zeros.

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

カテゴリ

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

Community Treasure Hunt

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

Start Hunting!

Translated by