MATLAB ベクトルから NaN を削除
このチュートリアルでは、MATLAB の isnan()
関数を使用してベクトルから NaN
値を削除する方法について説明します。
MATLAB ベクトルから NaN
値を削除
NaN
値は、算術演算の場合に生成される未定義の値です。 ベクトルから NaN
値を削除するには、その位置またはインデックスを見つける必要があります。その後、NaN
値を null に設定できます。
NaN
値の位置を見つけるために、0 と 1 の論理配列を返す isnan()
関数を使用できます。 logical 配列の 1 は NaN
値を表し、配列の 0 はその他の値を表します。
入力ベクトルに複素数値が含まれているとします。 isnan()
関数は、実部と虚部の両方に NaN
が含まれていない場合は 0 を返し、実部または虚部に Nan
が含まれている場合は 1 を返します。 isnan()
関数の出力を使用して、NaN
値に null または空のベクトルを割り当てることができます。
たとえば、NaN
値を含むベクトルを作成し、isnan()
関数を使用してそれらを削除してみましょう。 以下のコードを参照してください。
clc
clear
v = [1 2 nan 2 nan]
i = isnan(v)
v(i) = []
出力:
v =
1 2 NaN 2 NaN
i =
1×5 logical array
0 0 1 0 1
v =
1 2 2
上記のコードでは、変数 i
は NaN
値の位置に 1 を含む論理配列であり、これらのインデックス値を使用して NaN
値を空のベクトルに等しく設定しました。 上記の出力では、ベクトル v
から NaN
値が削除されていることがわかります。
上記のコードでは、NaN
値を空のベクトルに等しく設定していますが、それらを 0 などの他の値に置き換えることもできます。たとえば、ベクトル内の NaN
値をゼロに置き換えてみましょう。
以下のコードを参照してください。
clc
clear
v = [1 2 nan 2 nan]
i = isnan(v)
v(i) = 0
出力:
v =
1 2 NaN 2 NaN
i =
1×5 logical array
0 0 1 0 1
v =
1 2 0 2 0
最初のベクトルの最初の値が 2 番目のベクトルの最初の値に依存するように、互いに依存する 2つのベクトルがあるとします。 ベクトルには NaN
値があり、2つのベクトルは相互に依存しているため、それらの値と対応する他の値を削除したいと考えています。
出力ベクトルも同じサイズにする必要があります。
最初のベクトルの NaN
値と 2 番目のベクトルの対応する値が NaN
値でなくても削除する必要があります。次に、2 番目のベクトルで同じことを行う必要があります。 両方のベクトルに存在する NaN
値のインデックスを見つけることができる別の方法があり、論理 OR
を使用して 2つの値を結合し、結合した結果を使用して削除または置換できます。 NaN
値。
たとえば、2つのベクトルを作成し、それらの NaN
値と、両方のベクトルに存在する対応する値を削除してみましょう。 以下のコードを参照してください。
clc
clear
v1 = [1 2 nan 2 nan]
v2 = [NaN 1 0 2 5]
i1 = isnan(v1);
i2 = isnan(v2);
i = i1 | i2
v1(i) = []
v2(i) = []
出力:
v1 =
1 2 NaN 2 NaN
v2 =
NaN 1 0 2 5
i =
1×5 logical array
1 0 1 0 1
v1 =
2 2
v2 =
1 2
上記のコードでは、記号 |
を使用しました。 論理 OR
は、2つの論理配列を結合します。 上記の出力では、出力ベクトルに NaN
値がなく、サイズが等しいことがわかります。
NaN
値が両方のベクトルの同じ位置に存在する場合にのみそれらを削除したい場合は、論理 OR
の代わりに論理 AND
を使用できます。 たとえば、2つのベクトルを作成し、値が同じインデックスに存在する場合にのみ、それらから NaN
値を削除してみましょう。
以下のコードを参照してください。
clc
clear
v1 = [1 2 nan 2 nan];
v2 = [1 0 nan 5 6];
i1 = isnan(v1);
i2 = isnan(v2);
i = i1 & i2;
v1(i) = []
v2(i) = []
出力:
v1 =
1 2 2 NaN
v2 =
1 0 5 6
上記の出力では、両方のベクトルの最初の NaN
値が同じ位置にあり、出力から削除されています。 2 番目の NaN
値は、対応する値が NaN
ではないため、削除されません。