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

时间:2012-01-15 21:05:40

标签: arrays matlab cell

我有像

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

并希望从中减去一个像b = {'a'的数组; '和'; '的'; “我”; '#'}。

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

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

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

但问题是数组b包含超过200个字符串元素,这大大减慢了我的代码。有更好的方法吗?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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'