如何在Matlab中以前的非NaN值逻辑替换NaN值?

时间:2015-02-26 16:50:46

标签: matlab nan

我有一个矩阵data,我保存到data_Buffer<=-999中的所有值data都被NaN替换并存储在data_Buffer中。这是我的代码:

fid = fopen('D:\Data\');
data = fread(fid,'*int16');% 21 x 200 matrix
fclose(fid);

data(data <= -999) = nan;
s = size(data,2);
data_Buffer(:,k:k+s-1) = data;% This is a buffer to store the data matrix

问题/要求:

1)在data_Buffer中,如何查看连续搜索NaN值并将其替换为之前的非NaN值?该算法应从第一列开始并向最后一列移动(即,如果第10列中有NaN,则应将其替换为第9列中的有效值。

2)如果有多个连续的NaN值,则应将其替换为行中先前的非NaN值。

1 个答案:

答案 0 :(得分:1)

我使用solution provided by Matt at Matlab Central解决了它,并针对行而不是列进行了修改:

function A = fill_nans(A)
% Replaces the NaN in each column with 
% previous non-NaN values.

for i = 1:size(A,1)
   I = A(1,i);
   for j = 2:size(A,2)
    if isnan(A(i,j))
        A(i,j) = I;
    else
        I  = A(i,j);
    end
end