如果A是B的向量子集,我怎样才能在MATLAB中找到B中的A的索引?

时间:2018-05-22 00:16:12

标签: matlab indexing

考虑行向量A和行向量B.例如:

A = [1 2 3 7 8 10 12];
B = [1 1 2 2 2 3 5 6 6 7 7 7 8 8 10 10 10 11 12 12 12 13 15 16 18 19];

A先前已被检查为B的子集。通过子集,我特别指的是A中的所有元素都可以在B中找到。我知道A中的元素不会重复。但是,B中的元素可以随意重复多次或多次。我使用以下方法检查了这个条件:

is_subset = all(ismember(A,B));

完成所有这些后,我需要知道B中A元素的索引,包括这些元素在B中重复的时间。对于上面的示例A和B,输出将是:

C = [1 2 3 4 5 6 10 11 12 13 14 15 16 17 19 20 21];

2 个答案:

答案 0 :(得分:5)

使用ismember查找相关的逻辑索引。然后使用find将它们转换为线性索引。

C = find(ismember(B,A));

答案 1 :(得分:0)

您可以找到A与B的每个元素的差异,并获得所需的索引。如下所示:

A = [1 2 3 7 8 10 12];
B = [1 1 2 2 2 3 5 6 6 7 7 7 8 8 10 10 10 11 12 12 12 13 15 16 18 19];
C = [1 2 3 4 5 6 10 11 12 13 14 15 16 17 19 20 21];
tol = 10^-3 ;
N = length(A) ;
iwant = cell(N,1) ;
for i = 1:N
    idx = abs(A(i)-B)<=tol ;
    iwant{i} = find(idx) ;
end
iwant = [iwant{:}] ;