Matlab 基于最小数值的NAN填充
我有一个矩阵a,我想在每列中填入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 =
[ 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总是很棒的