matlab - 在矩阵中包含预定行号的 NaN 行。

标签 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 ];

应用过滤器后,我使矩阵 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/

相关文章:

c# - 计算矩阵对角线上的数字总和

c - 添加矩阵/返回数组

python - Pandas read_csv() : keep 0 as 0 (not convert it to NaN)

postgresql - 添加约束以防止表中出现 NaN

python - 将 nan 转换为 NaN 有多大用处?

matlab - 从数据中去除非周期性偏移的向量化,其中偏移值与数据存储在同一向量中

performance - Cellfun 与简单 Matlab 循环性能对比

Matlab 部署 : add files to source control?

matlab - 如何在Matlab中生成具有对数正态分布且具有指定几何平均值和几何标准差的随机数

r - 通过 R 中的矩阵列表进行索引