我想根据给定的索引将一个数组分为两个。具体来说,有两个数组,一个数组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中所有功能都有一个数组函数。
答案 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 = A( setdiff( 1:size(A,1), B ), : ); % rows from A *not* indexed by B, all columns