【问题标题】:How to interpolate NaN values linearly in MATLAB? [duplicate]如何在 MATLAB 中线性插值 NaN 值? [复制]
【发布时间】:2014-12-14 00:16:25
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    你很接近:

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

    您必须对每个变量重复此操作,因为 nan 值或不在相同的索引处。 var2var3 需要外推。

    ((顺便说一句,这个答案与this one.) 几乎相同。)

    【讨论】:

    • 谢谢!它适用于一个变量,请让我看看它是否适用于我的所有变量,然后我会接受。
    • 我只是想确定一下,我做到了。它非常有效。感谢您提供快速准确的解决方案:)
    • 如果可以一次性获得解决方案会很好,但是由于您在数组的末尾和开头都有 NaN 值,因此这种一次性方法只有在当且仅当你可以这样组合它们:A = [var2 var1 var3].
    • 哦,没问题,我将使用它与所有变量的 for 循环一起使用。
    • 您可以将重复案例报告为问题的 cmets。这样可以减轻 SO 的负担。
    猜你喜欢
    • 1970-01-01
    • 2012-09-09
    • 2011-04-07
    • 1970-01-01
    • 2012-11-06
    • 2016-10-20
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多