1

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

2 回答 2

3

尝试

  i = find(isnan(A));
  A(i) = A(i-1);
于 2012-08-29T04:55:51.013 回答
0

首先生成一个包含 a 的逻辑向量true,只要该行的一个元素是 a 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
于 2012-08-29T06:54:58.800 回答