根据给定索引拆分数组

Split array based on given indices

我想根据给定的索引将一个数组分成两个。具体来说,有两个数组,一个数组 A 包含数据(3 列),另一个数组 B 包含索引。

A = [10 11 12; 
     20 21 22; 
     30 31 32; 
     40 41 42]
B = [1 3]

因此,我想要两个新数组 C 和 D,其中 C 包含 A 中给定索引 B 和 D 中的所有值,包括其余值。

C = [10 11 12; 
     30 31 32] 
D = [20 21 22; 
     40 41 42]

目前,我有一个循环(使用 ismember 检查 B 中的 i 并将 A 中的值相应地附加到数组 C/D),但由于我有大量数据,因此需要很长时间。感谢任何帮助,我知道 matlab 中的所有内容都有一个数组函数。

给出

A = [10 11 12; 
     20 21 22; 
     30 31 32; 
     40 41 42];
B = [1 3];

我们可以通过一些简单的索引来创建 C

C = A( B, : ); % rows from A indexed by B, all columns

并使用 A 的所有行索引的 setdiff 和数组 B

创建 D
D = A( setdiff( 1:size(A,1), B ), : ); % rows from A *not* indexed by B, all columns

这道题最具挑战性的部分是获得D。您可以免费将 A 分配给 D,并删除不需要的行。

C = A(B,:);
D = A;
D(B,:) = [];