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

如何在MATLAB中线性插值NaN值?,matlab,signal-processing,interpolation,nan,linear-interpolation,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(va

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

我有不同的时间序列,在不同的地方包含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);
我所尝试的: 我试过使用,但因为它是立方的,例如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));
你很接近:

t = 1:numel(var1);
var1_filled = interp1(t(~isnan(var1)),var1(~isnan(var1)),t,'linear','extrap');
您必须对每个变量重复此操作,因为nan值是否在相同的索引中。需要对
var2
var3
进行外推

((顺便说一句,这个答案几乎和一个相同。)

你很接近:

t = 1:numel(var1);
var1_filled = interp1(t(~isnan(var1)),var1(~isnan(var1)),t,'linear','extrap');
您必须对每个变量重复此操作,因为nan值是否在相同的索引中。需要对
var2
var3
进行外推


((顺便说一句,这个答案几乎和一个相同。)

谢谢!它对一个变量很有效,请让我看看它是否对我所有的变量都有效,然后我会接受。我只是想确认一下,我做到了。它非常有效。感谢这个快速而准确的解决方案:)如果能一次性获得解决方案就好了,但是由于数组的末尾和开头都有NaN值,只有当且仅当您这样组合它们时,这种一次性方法才可能:
A=[var2 var1 var3]
。哦,这没问题,我将在所有变量上使用for循环。您可以将重复的案例报告为问题的注释。这样可以减轻您的负担。谢谢!它对一个变量很有效,请让我看看它是否对我所有的变量都有效,然后我会接受。我只是想确认一下,我做到了。它非常有效。感谢这个快速而准确的解决方案:)如果能一次性获得解决方案就好了,但是由于数组的末尾和开头都有NaN值,只有当且仅当您这样组合它们时,这种一次性方法才可能:
A=[var2 var1 var3]
。哦,这没问题,我将在所有变量上使用for循环。您可以将重复的案例报告为问题的注释。这样可以减轻工作负担。