如果 A 是 B 的向量子集,如何在 MATLAB 中找到 B 内 A 的索引?



考虑行向量 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];

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

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

你可以找到 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{:}] ;

最新更新