在预定的行号中包括矩阵中的NaN行。

时间:2015-10-06 11:53:52

标签: matlab matrix nan

最初,我有

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 的行。

我该怎么做?

1 个答案:

答案 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