根据给定索引拆分数组

时间:2019-08-15 06:48:22

标签: matlab matrix-indexing

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

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

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

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

现在,我有一个循环(用ismember检查B中的i,并相应地将A中的值附加到数组C / D中),但是由于我有很多数据,所以要花很长时间。感谢任何帮助,我知道在matlab中所有功能都有一个数组函数。

2 个答案:

答案 0 :(得分:3)

此问题中最具挑战性的部分是获取D。您可以将A分配给D,而无需花费任何费用,并删除不需要的行。

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

答案 1 :(得分:1)

给予

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

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

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