Matlab中两个字符串单元数组的差异

4

I have a cell array like

a={'potential'; 'impact'; 'of'; 'stranded'; 'assets'; 'and'; 'other'; 'necessary'; 'regulatory'; 'approvals'; 'assets'}

我想从a数组中减去一个类似于b={'a'; 'and'; 'of'; 'my'; '#'}的数组。

使用setdiff(a,b)在计算差异后对我的数组进行排序。我想要的是在不排序a的情况下从a中消除所有存在于b中的元素。此外,重复项应该被保留,例如,在最终数组中,数组a中的'assets'应该出现在两个位置。

我正在使用以下代码完成此操作:

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

但问题在于数组 b 包含超过 200 个字符串元素,这会大大减慢我的代码速度。是否有更好的方法来处理这个问题?

2个回答

4
tf = ismember(a,b);
a = a(~tf)

0
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'

这个解决方案的问题在于原始单元数组中出现了两个位置的元素“assets”。但在最终数组中,重复项被消除,而“assets”仅出现一次。虽然我希望重复的元素应该保留在它们原来的位置上。 - AbbyJ
好的,说得对。你说你想保留重复项,我忽略了那部分内容。 - Nasser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接