ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

欠損データ

欠損データ値の表現

MATLAB® コードでは、欠損値または利用できないデータ値を、特定の値 NaN によって表すことが頻繁にあります。これは、Not-a-Number を表します。

IEEE® 浮動小数点演算既定は、0/0 のような定義されない演算の結果として、NaN を定義します。

NaN を用いた計算

NaN を含む IEEE 変数に対して計算を行う場合、値 NaN は、最終結果まで伝播します。この動作によって、結果が利用できなくなることがあります。

たとえば、中央の要素を NaN に設定した、3 x 3 の魔方陣を含む行列を考えてみましょう。

a = magic(3); a(2,2) = NaN
 
a =
     8     1     6
     3   NaN     7
     4     9     2

行列の各列について合計を計算します。

sum(a) 
 
ans = 
    15   NaN    15

中央の列の要素の合計は、この列が NaN を含むため、値が NaN になっていることに注意してください。

最終結果に NaN を含めたくない場合は、データからこれらの値を削除してください。詳細は、データからの NaN の除去を参照してください。

データからの NaN の除去

IEEE 関数 isnan を使用してデータの NaN を見つけ、次の表の手法を用いてデータから NaN を取り除くことができます。

    メモ:   NaN を見つけるためには、関数 isnan を使用してください。IEEE の演算既定によって、論理比較 NaN == NaN は必ず 0 になります (すなわち、true になることはありません)。したがって、x(x==NaN) = [] を用いて、データから NaN を取り除くことはできません。

コード

説明

i = find(~isnan(x));

x = x(i)

ベクトル x 内の NaN でない要素のインデックスを探し、NaN でない要素のみを残します。

x = x(~isnan(x));

ベクトル x から NaN を取り除きます。

x(isnan(x)) = [];

ベクトル x から NaN を取り除きます (別法)。

X(any(isnan(X),2),:) = [];

行列 X から NaN を含む行を取り除きます。

NaN を頻繁に取り除く場合には、次のような簡単な関数を作成して呼び出すと便利です。以下に例を示します。

function X = exciseRows(X)
X(any(isnan(X),2),:) = [];

NaN を含む行をすべて削除した後に、次のコマンドを使用して X の相関係数を計算します。

C = corrcoef(excise(X));

相関係数の詳細は、線形相関を参照してください。

欠損データの内挿

データの中間点を見つけるには、内挿機能を使用します。内挿を行うための最も簡単な関数は、1 次元内挿関数 interp1 です。

既定では、内挿法は 'linear' です。これは、中間値を計算するために既存のデータ点の組の間を直線で近似します。関数 interp1 の引数として指定できる方法には、他に次のものがあります。

  • 'nearest' — 最近傍点による内挿

  • 'linear' — 線形内挿

  • 'spline' — 区分的な 3 次スプライン内挿

  • 'pchip' または 'cubic' — 区分的 3 次エルミート内挿多項式

  • 'v5cubic' — MATLAB Version 5 の 3 次内挿。この方法では外挿は行われず、X が等間隔でない場合には警告が出され、'spline' が使用されます。

interp1 の詳細は、MATLAB ドキュメンテーションを参照するか、MATLAB プロンプトで「help interp1」と入力してください。

この情報は役に立ちましたか?