我在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]
答案 0 :(得分:2)
以下是我的方法:首先“计算”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) ) ) )