根据最小数值填充NaN

时间:2014-09-11 16:03:54

标签: matlab matrix nan

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

实施例

A = 
     [ 0 0 0
       0 0 6
       5 7 0]

应该是

A = 
     [NaN NaN NaN
      NaN NaN 6
      5   7   0]

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

中进行

感谢您的帮助!

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

@Luis是一个很好的答案,但是自Matlab 2016b起:

  

您可以直接使用运算符代替bsxfun。 来源:bsxfun

路易斯建议的最后一行可以替换为:A((1:size(A,1))' < row) = NaN;

因此,整个代码为:

[valid, row] = max(A~=0);
row(~valid) = size(A,1)+1; % in case some column contains all zeros
A((1:size(A,1))' < row) = NaN;

该解决方案似乎也运行得更快。

相关问题