MATLAB ベクトルから NaN を削除

Ammar Ali 2023年6月20日
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

上記のコードでは、変数 iNaN 値の位置に 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 ではないため、削除されません。

著者: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

関連記事 - MATLAB Vector