【问题标题】:How to logically replace a NaN value with previous non-NaN value in Matlab?如何在 Matlab 中用以前的非 NaN 值逻辑替换 NaN 值?
【发布时间】:2015-02-28 01:11:00
【问题描述】:

我有一个矩阵data,我将它保存到data_Bufferdata 中的所有值 <=-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

问题/要求:

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

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

【问题讨论】:

  • 什么是k?为什么不使用 data 的最小样本数据并解释预期输出?
  • 感谢评论,刚刚得到解决方案,我也会更新一个具体的例子

标签: matlab nan


【解决方案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

【讨论】:

  • 如果您自己解决了问题,您可以接受自己的答案。谢谢!
  • 很好地解决了您自己的问题。请注意,如果一行中的第一个元素是NaN,它不会被其他任何东西替换(但也许这就是你的问题)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-14
  • 2016-06-25
  • 2018-09-24
  • 2011-04-07
  • 2013-06-18
  • 2014-09-04
  • 2019-09-29
相关资源
最近更新 更多