データに NaN が多くなければ、INTERP1 関数が利用できます。統計処理を行う際、トライアル毎のデータを通常行または列毎に取り込まれるような場合、この方法が使用できます。
例えば、data という行列にいくつか NaN が含まれた場合、以下同様な処理を行います。
data = [ 2 3 4 5; ...
10 nan nan 25; ...
4 5 6 7
];
% NaN を置換した行列を保持する変数の定義
dataNoNaN = data;
% 1 つ行におけるデータ数の取得
datapoint = 1:size(data,2);
% すべての行に対して NaN の補間
for ii = 1:size(data,1)
tmpdata = data(ii,:);
% NaN のインデックスの取得
nanidx = ~isnan(tmpdata);
tmpNoNaN = tmpdata;
% INTERP1 により NaN の補間
tmpNoNaN(~nanidx) = interp1(datapoint(nanidx), tmpdata(nanidx), datapoint(~nanidx), 'pchip');
% データ行列の値を更新
dataNoNaN(ii,:) = tmpNoNaN;
end