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

一个想法是首先创建一个压缩矩阵B,它不包含带有 a 的行,NaN然后再次扩展该矩阵以与原始矩阵具有相同的长度:

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 回答