如何在MATLAB中线性插值NaN值?

时间:2014-10-18 15:42:26

标签: matlab signal-processing interpolation nan linear-interpolation

这可能是一个非常简单且经常被问到的问题,但是我尝试了很多解决方案,但没有一个能为我工作。

我有不同的时间序列,在不同的地方包含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。

我也试过自己实现一个类似的功能,它也不处理NaN:

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

1 个答案:

答案 0 :(得分:4)

你很近:

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

您必须为每个变量重复此操作,因为nan值是否在相同的索引处。 var2var3需要进行推断。

((这个答案与this几乎相同。))