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?
非常感谢。
这个问题的标题也几乎就是答案——使用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对输入向量每一端的值的行为略有不同。