4

次のマトリックスがあります

A = [ 0    0  
      0    0 
      1   -1 
    NaN  NaN 
    NaN  NaN 
      0    0 
    NaN  NaN 
    NaN  NaN]

NaNすべての行をその上の行に置き換えたい。上記のマトリックスの場合、これは次のようになります。

A = [0  0 
     0  0 
     1  -1 
     1  -1 
     1  -1 
     0   0 
     0   0 
     0   0] 
4

2 に答える 2

4

1 つのアイデアは、最初に aの行を含まない圧縮された行列を作成し、次にこの行列を元の行列と同じ長さになるように再度拡張することです。BNaN

mask = any(isnan(A), 2);
B = A(~mask, :);
result = B(cumsum(~mask), :);
于 2012-08-30T07:02:53.360 に答える
2

これをベクトル化できるかどうかはわかりません...より単純な解決策はおそらくループになるでしょう:

newRow = [];
nans = isnan(A(:,1));
for ii = 1:size(A,1)

    if nans(ii)

        %# first row might be NaN -- skip it
        if ii==1
            continue; end

        %# for all other rows:
        if isempty(newRow) 
            newRow = A(ii-1,:); end

        A(ii,:) = newRow;

    else
        newRow = [];
    end

end
于 2012-08-30T05:23:32.867 に答える