1

行ごとに NaN 要素が 1 つある場合は、それを削除して上位の要素に置き換えたい

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

true行の1つの要素がである場合は常に、最初にを含む論理ベクトルを生成します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 に答える