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