最初,我有
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 ];
应用过滤器后,我使矩阵 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 ];
我知道我想要的输出尺寸(= 初始Matrix A 尺寸),以及应为 NaN 的行号 (= Row_NaN_MatA) 。其余行应等于矩阵 B2 的行。
我该怎么做?
最佳答案
使用setdiff
通过 setdiff-ing
Row_NaN_MatA
以及整个行范围的一维索引数组来获取不属于 Row_NaN_MatA
的行 ID A
,就像这样 -
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
关于matlab - 在矩阵中包含预定行号的 NaN 行。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32969285/