将矩阵中的NaN替换为上面一行中的值

时间:2012-08-29 04:28:05

标签: matlab

如果每行有一个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
    ]

2 个答案:

答案 0 :(得分:3)

尝试

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

答案 1 :(得分:0)

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

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