【问题标题】:Difference of two cell arrays of strings in MatlabMatlab中两个字符串单元格数组的差异
【发布时间】:2012-01-15 21:05:39
【问题描述】:

我有一个像

这样的元胞数组
a={'potential'; 'impact'; 'of'; 'stranded'; 'assets'; 'and'; 'other'; 'necessary'; 'regulatory'; 'approvals'; 'assets'}

并想从中减去一个数组,例如 b={'a'; '和'; '的'; '我的'; '#'}。

在计算出差异后,使用 setdiff(a,b) 对我的数组进行排序。我想要的是从 a 中消除 b 中存在的所有元素而不对 a 进行排序。也应该保留重复,例如。数组 a 中的“资产”应出现在最终数组的两个位置。

我正在使用的以下代码可以完成这项工作:

for i = 1:length(b)
    tf = ~strcmp(b(i),a)
    a = a(tf,:)
end

但问题是数组 b 包含超过 200 个字符串元素,这大大减慢了我的代码速度。有没有更好的方法来做到这一点?

【问题讨论】:

    标签: arrays matlab cell


    【解决方案1】:
    tf = ismember(a,b);
    a = a(~tf)
    

    【讨论】:

      【解决方案2】:
      EDU>> a
      
      a =     
          'potential'
          'impact'
          'of'
          'stranded'
          'assets'
          'and'
          'other'
          'necessary'
          'regulatory'
          'approvals'
          'assets'
      
      EDU>> b
      
      b = 
      
          'a'
          'and'
          'of'
          'my'
          '#'
      
       [I,J]=setdiff(a,b);
      

      现在做

      EDU>> a(sort(J),:)
      
      ans = 
      
          'potential'
          'impact'
          'stranded'
          'other'
          'necessary'
          'regulatory'
          'approvals'
          'assets'
      

      【讨论】:

      • 此解决方案的问题是元素“资产”出现在原始元胞数组中的两个位置。但是在最后的数组中,重复被消除了,“资产”只出现了一次。虽然我希望重复的元素应保留在其原始位置。
      • 好的,好点。你说你希望保留副本。我忽略了那部分。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多