How to merge adjacent NaN values into single NaN value in a vector?

1 回表示 (過去 30 日間)
Mr M.
Mr M. 2018 年 7 月 1 日
編集済み: Stephen23 2018 年 7 月 3 日
I have [1 2 3 NaN NaN 0 1 2 NaN 9 8 7 6 NaN NaN NaN 1 1] anf I want [1 2 3 NaN 0 1 2 NaN 9 8 7 6 NaN 1 1] without a for cycle. Are there any trick to do this?

採用された回答

Stephen23
Stephen23 2018 年 7 月 1 日
編集済み: Stephen23 2018 年 7 月 3 日
No loops required, no tricks required, just basic MATLAB indexing:
old = [1 2 3 NaN NaN 0 1 2 NaN 9 8 7 6 NaN NaN NaN 1 1];
idx = ~isnan(old);
new = old(idx | [true,idx(1:end-1)]);
  3 件のコメント
Mr M.
Mr M. 2018 年 7 月 3 日
Sorry, but this is wrong when old vector starts with NaN values!
Stephen23
Stephen23 2018 年 7 月 3 日
編集済み: Stephen23 2018 年 7 月 3 日
@Mr M.: you are right. It is easy to fix, just exchange the false for true:
>> old = [NaN,NaN,NaN,1,2,3,NaN,NaN,0,1,2,NaN,9,8,7,6,NaN,NaN,NaN]
old =
NaN NaN NaN 1 2 3 NaN NaN 0 1 2 NaN 9 8 7 6 NaN NaN NaN
>> idx = ~isnan(old);
>> new = old(idx | [true,idx(1:end-1)])
new =
NaN 1 2 3 NaN 0 1 2 NaN 9 8 7 6 NaN

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

その他の回答 (1 件)

Andrei Bobrov
Andrei Bobrov 2018 年 7 月 2 日
a = [1 2 3 NaN NaN 0 1 2 NaN 9 8 7 6 NaN NaN NaN 1 1];
lo = ~isnan(a);
lo(strfind(lo,[0 1])) = true;
out = a(lo);

カテゴリ

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