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

Find specific union of two arrays with different length in MATLAB

我在 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]

这是我的方法:首先 "calculate" Au 作为 A 的唯一向量。在下一步中,使用 B 作为 Au 的逻辑索引: Au( 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) ) ) )