1. ホーム
  2. matlab

[解決済み] MATLABでベクトルからNaNを除去する

2022-02-05 17:17:43

質問

2つのベクトルからナンを除去したいのですが、ベクトルの長さが同じでなければならないため、一方のベクトル内のナンを除去すると、それがナンでなくても、もう一方のベクトル内の対応する値も除去しなければならないのです。例えば

x = [1 nan 3 4 5]
y = [6 7 8 nan 10]

xのnanとyの7を取り除きたい。また、yのnanとxの4を取り除きたい。こうすれば、ベクトルの長さは同じに保たれる。この質問は、以下の質問と類似しています。 MATLAB: 行列からNaN要素を効率的に削除する方法 しかし、私はMATLABの初心者で、行列ではなくベクトルで同じことをする方法がよくわかりません。よろしくお願いします。

どのように解決するのですか?

以下をお試しください。

x = [1 nan 3 4 5]
y = [6 7 8 nan 10]
id1 = find(isnan(x));
id2 = find(isnan(y));
x([id1,id2]) = []
y([id1,id2]) = []

出力します。

x =
     1     3     5
y =
     6     8    10

説明する。

find(isnan(x));

のNaNをインデックスとするベクトルを作成する。 x . に対して行っているのと同じです。 y . を用いて,2つのベクトルを連結する. [id1,id2] . 最後に x([id1,id2]) = [] は、NaN が存在するベクトルから要素を削除する。