Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 基于最小数值的NAN填充_Matlab_Matrix_Nan - Fatal编程技术网

Matlab 基于最小数值的NAN填充

Matlab 基于最小数值的NAN填充,matlab,matrix,nan,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] 有没有一种方法可以将这个问题矢量化,而不是一步两个循环 谢谢你的帮助 用于查找每列中的第一个非零(如果有),然后为应设置为NaN的值生成掩码: [valid, row] = max(A~=0); row(~valid) =

我有一个矩阵a,我想在每列中填入NaN,直到遇到数值为止

范例

A = 
     [ 0 0 0
       0 0 6
       5 7 0]
应该是

A = 
     [NaN NaN NaN
      NaN NaN 6
      5   7   0]
有没有一种方法可以将这个问题矢量化,而不是一步两个循环

谢谢你的帮助

用于查找每列中的第一个非零(如果有),然后为应设置为
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;
用于查找每列中的第一个非零(如果有),然后为应设置为
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;

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

您可以直接使用运算符而不是bsxfun。资料来源:

路易斯建议的最后一行可以替换为:
A((1:size(A,1))“

因此,整个代码是:

[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;
[有效,行]=max(A~=0);
行(~valid)=大小(A,1)+1;%如果某列包含所有零
A((1:size(A,1))'<行)=NaN;

这个解决方案似乎运行得更快。

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

您可以直接使用运算符而不是bsxfun。资料来源:

路易斯建议的最后一行可以替换为:
A((1:size(A,1))“

因此,整个代码是:

[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;
[有效,行]=max(A~=0);
行(~valid)=大小(A,1)+1;%如果某列包含所有零
A((1:size(A,1))'<行)=NaN;

这个解决方案似乎运行得更快。

一列可能包含所有零吗?那么应该怎么做?一列是否可能包含所有零?那么该怎么办?聪明的解决方案!最好的是它使用了
bsxfun
@Divakar使用
bsxfun
智能解决方案总是很棒!最好的是它使用了
bsxfun
@Divakar使用
bsxfun总是很棒的