【问题标题】:Replace NaNs in matrix with the values from the row above将矩阵中的 NaN 替换为上一行中的值
【发布时间】:2012-08-29 15:19:28
【问题描述】:

如果每行有一个 NaN 元素,我想删除它,并用上面的元素替换

A = [   0    0;   
        0    0;   
        1   -1;   
      nan  nan;   
        0    0;   
        0    0; 
      nan  nan;
        0    0
    ]

想要的输出是:

A = [   0    0;   
        0    0;   
        1   -1;   
        1   -1;   
        0    0;   
        0    0; 
        0    0; 
        0    0
    ]

【问题讨论】:

    标签: matlab


    【解决方案1】:

    试试

      i = find(isnan(A));
      A(i) = A(i-1);
    

    【讨论】:

      【解决方案2】:

      每当行的一个元素是NaN 时,首先生成一个包含true 的逻辑向量。然后您可以使用该向量来操作矩阵

      mask = any(isnan(A), 2);
      A(mask, :) = A([mask(2:end); false], :);
      

      另一种方法是

      mask = any(isnan(A), 2);
      idx = find(mask);
      A(idx, :) = A(idx - 1, :);
      

      注意:如果第一行包含NaN,这两种方法都会失败。为了安全起见,您可以使用类似

      if mask(1)
          %# First row contains a NaN.
          ... Do something ...
      else
          ... Ordinary replacement ...
      end
      

      【讨论】:

        猜你喜欢
        • 2016-09-10
        • 1970-01-01
        • 2020-08-08
        • 1970-01-01
        • 1970-01-01
        • 2020-06-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多