1

これはおそらく非常に単純でよくある質問ですが、多くの解決策を試しましたが、どれもうまくいきませんでした。

さまざまな場所に NaN を含むさまざまな時系列があるため、それらすべてを満たす単一のソリューションを取得したいと考えています。

例えば ​​:

var1 = [80.2 , 76.5 , NaN , 62.3];
var2 = [NaN , NaN , 100.5 , 102.4];
var3 = [1.2 , 4.7 , NaN, NaN];

次のような推定完全データを取得できる単純な補間コードが必要です。

var1_filled = fill_vector(var1);

私が試したこと:

naninterpを使ってみましたが、立方体なので、たとえば var3 は 1e4 のオーダーになり、これは望ましくありません。'cubic'引数をに変更すると'linear'、NaN は処理されません。

同様の関数を自分で実装しようとしましたが、これも NaNs を処理しません。

dd_x=find(~isnan(dd));
dd_y=dd(~isnan(dd));
yi=interp1(dd_x,dd_y,1:length(dd));
4

1 に答える 1

4

あなたは近くにいます:

t = 1:numel(var1);
var1_filled = interp1(t(~isnan(var1)),var1(~isnan(var1)),t,'linear','extrap');

nan 値または同じインデックスにないため、変数ごとにこれを繰り返す必要があります。var2とには外挿が必要ですvar3

((ちなみに、この答えはこれとほとんど同じです ))

于 2014-10-18T15:48:05.343 に答える