如何填写缺少的NAN?

Kat*_*Kat 1 matlab if-statement nan user-defined-functions conditional-statements

我想[1 nan 1 2 2 nan nan 3 nan 4 nan nan 5]变成[1 1.5 1 2 2 2 3 3 3.5 4 4 5 5]. 如果只有一个 NAN,我希望用前后数字的平均值填充 NAN。如果有多个 NAN。我希望用最近的数字填充 NAN。

到目前为止,我只有找到单个 NAN 的代码:

max_x = x(:, 2);
min_x = x(:, 3);

for jj = 1:length(max_x)
    for kk = 1:length(min_x)
        if isnan(max_x(jj))
            max_x (jj) = ((max_x(jj-1)+max_x(jj+1))/2);
        elseif isnan (min_x(kk))
            min_x (kk) = ((min_x(kk-1)+min_x(kk+1))/2);
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

我如何填写不是单身的 NAN?

非常感谢。

Wol*_*fie 5

这个问题的标题也几乎就是答案——使用fillmissing.

A = [1 nan 1 2 2 nan nan 3 nan 4 nan nan 5];
B = fillmissing(A,'linear');
Run Code Online (Sandbox Code Playgroud)

此功能是在 R2016b 中引入的。


使用interp1和可以实现相同的逻辑isnan

idx = ~isnan( A );
x = 1:numel(A);
B = interp1( x(idx), A(idx), x, 'linear', 'extrap' );
Run Code Online (Sandbox Code Playgroud)

请注意,此处的外推NaN对输入向量每一端的值的行为略有不同。