如何在逻辑上用 Matlab 中的先前非 NaN 值替换 NaN 值?
How to logically replace a NaN value with previous non-NaN value in Matlab?
我有一个矩阵 data
,我正在将其保存到 data_Buffer
。 data
中的所有值 <=-999
都被 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
Questions/requirements:
1) 在 data_Buffer
中,如何查看连续搜索 NaN
值并将其替换为之前的非 NaN
值?该算法应从第一列开始并向最后一列移动(即,如果第 10 列中有 NaN
,则应将其替换为第 9 列中的有效值)。
2) 如果有多个连续的NaN
值,则应将它们替换为该行中的前一个非NaN
值。
我使用 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
我有一个矩阵 data
,我正在将其保存到 data_Buffer
。 data
中的所有值 <=-999
都被 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
Questions/requirements:
1) 在 data_Buffer
中,如何查看连续搜索 NaN
值并将其替换为之前的非 NaN
值?该算法应从第一列开始并向最后一列移动(即,如果第 10 列中有 NaN
,则应将其替换为第 9 列中的有效值)。
2) 如果有多个连续的NaN
值,则应将它们替换为该行中的前一个非NaN
值。
我使用 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