根据最小数值填充NaN

qfd*_*qfd 1 matlab matrix nan

我有一个矩阵A,我想在每列中填充NaN,直到遇到数值.

A = 
     [ 0 0 0
       0 0 6
       5 7 0]
Run Code Online (Sandbox Code Playgroud)

应该

A = 
     [NaN NaN NaN
      NaN NaN 6
      5   7   0]
Run Code Online (Sandbox Code Playgroud)

有没有办法对这个问题进行矢量化,而不是在两个for循环步骤中进行

谢谢你的帮助!

Lui*_*ndo 6

用于max在每列中查找第一个非零(如果有),然后bsxfun为应设置为的值生成掩码NaN:

[valid, row] = max(A~=0);
row(~valid) = size(A,1)+1; %// in case some column contains all zeros
A(bsxfun(@lt, (1:size(A,1)).', row)) = NaN;
Run Code Online (Sandbox Code Playgroud)

  • @Divakar使用`bsxfun`总是很棒 (2认同)