最初,我有
Matrix A=
[ 1 2 3
4 255 6
NaN NaN NaN
7 8 9
10 11 12
NaN NaN NaN
10 9 11 ];
我找到了所有NaN的行号。
Row_NaN_MatA = [3 6];
删除这些行后,我留下:
Matrix B1 =
[ 1 2 3
4 255 6
7 8 9
10 11 12
10 9 11 ];
使用过滤器后,我制作第二排Matrix B = NaN NaN NaN。因此
Matrix B2 =
[ 1 2 3
NaN NaN NaN
7 8 9
10 11 12
10 9 11 ];
现在,问题是,在完成所有这些处理之后,我想要返回初始矩阵,但所有已删除的元素都是NaN。所以我想要的输出是:
Output Matrix=
[ 1 2 3
NaN NaN NaN
NaN NaN NaN
7 8 9
10 11 12
NaN NaN NaN
10 9 11 ];
我知道我想要的输出尺寸(=初始矩阵A 尺寸),行数应该是NaN(= Row_NaN_MatA )。其余行应该等于 Matrix B2 的行。
我该怎么做?
答案 0 :(得分:3)
使用setdiff
获取Row_NaN_MatA
setdiff-ing
不属于Row_NaN_MatA
的行ID,并使用A
的整个行范围的{1D索引数组1}},就像这样 -
output = A
output(setdiff(1:size(A,1),Row_NaN_MatA),:) = B2
您也可以使用ismember
获得相同的效果 -
output(~ismember(1:size(A,1),Row_NaN_MatA),:) = B2
或者在那里使用bsxfun
-
output(all(bsxfun(@ne,Row_NaN_MatA(:),1:size(A,1))),:) = B2
示例运行 -
>> A
A =
1 2 3
4 255 6
NaN NaN NaN
7 8 9
10 11 12
NaN NaN NaN
10 9 11
>> B1
B1 =
1 2 3
4 255 6
7 8 9
10 11 12
10 9 11
>> B2
B2 =
1 2 3
NaN NaN NaN
7 8 9
10 11 12
10 9 11
>> output
output =
1 2 3
NaN NaN NaN
NaN NaN NaN
7 8 9
10 11 12
NaN NaN NaN
10 9 11