在MATLAB中查找具有不同长度的两个数组的特定并集

时间:2016-02-03 12:09:12

标签: arrays matlab indexing unique

我在Matlab中遇到了编码问题,我试图在没有太多for循环的情况下找到解决方案,从而减慢了这个过程。

我有一个看起来像这样的数组:

A = [1,1,1,2,2,2,2,2,3,3,3,3,4,4,4,4,4,5]

另一个看起来像:

B = [0,1,0,1,1]

在B中,元素总是与A中的唯一元素一样多,并且值对应于A中的唯一元素,换句话说:

length(unique(A)) = length(B)

我想计算一个结果,告诉我A中的B == 0(C)和B == 1(D)的索引。

C = [1,2,3,9,10,11,12]
D = [4,5,6,7,8,13,14,15,16,17,18]

1 个答案:

答案 0 :(得分:2)

以下是我的方法:首先“计算”Au作为A的唯一向量。在下一步中,使用BAuAu( logical(B) )进行逻辑索引 - 这将获得A中的值。然后检查哪些值是该组的成员,然后获取它们的索引。可能有一种更简单的方法。

A = [1,1,1,2,2,2,2,2,3,3,3,3,4,4,4,4,4,5]
Au = unique( A );
B = [0,1,0,1,1];

C = find( ismember( A, Au(  logical(B) ) ) )
D = find( ismember( A, Au( ~logical(B) ) ) )