【问题标题】:If A is a vector subset of B, how can I find the indices of A within B in MATLAB?如果 A 是 B 的向量子集,我如何在 MATLAB 中找到 B 中 A 的索引?
【发布时间】:2018-05-22 00:16:12
【问题描述】:

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

【问题讨论】:

    标签: matlab indexing


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2012-09-03
        • 2012-11-27
        • 2020-09-30
        • 1970-01-01
        • 1970-01-01
        • 2016-03-01
        • 1970-01-01
        • 2012-12-18
        • 1970-01-01
        相关资源
        最近更新 更多