【问题标题】:Take out elements from a vector that meets certain condition从满足一定条件的向量中取出元素
【发布时间】:2015-10-12 04:00:21
【问题描述】:

我有两个向量,A = [1,3,5]B = [1,2,3,4,5,6,7,8,9,10]。我想通过从B 中提取A 没有的一些元素来获得C=[2,4,6,7,8,9,10]

我不想使用循环,因为这是来自真实数据模拟的简化问题。在实际情况下,AB 很大,但 A 包含在 B 中。

【问题讨论】:

    标签: performance matlab vector vectorization


    【解决方案1】:

    这里有两种方法,

    C=setdiff(B,A)
    

    但如果值在B 中重复,它们只会在C 中出现一次,或者

    C=B(~ismember(B,A))
    

    这将保留B中的重复值。

    【讨论】:

      【解决方案2】:

      uniquesortdiff 的一种方法-

      C = [A B];
      
      [~,~,idC] = unique(C);
      [sidC,id_idC] = sort(idC);
      
      start_id = id_idC(diff([0 sidC])==1);
      out =  C(start_id(start_id>numel(A)))
      

      示例运行 -

      案例#1(问题样本):

      A =
           1     3     5
      B =
           1     2     3     4     5     6     7     8     9    10
      out =
           2     4     6     7     8     9    10
      

      案例#2(更通用的案例):

      A =
          11    15    14
      B =
          19    14     6     8     9    11    15
      out =
           6     8     9    19
      

      【讨论】:

      • 我曾尝试使用索引来做同样的事情,但我失败了。感谢您的代码。
      • @meng 我认为如果输入数组本身有重复项,它将不起作用。
      猜你喜欢
      • 1970-01-01
      • 2021-11-27
      • 2021-01-03
      • 1970-01-01
      • 2021-11-27
      • 2018-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多