我有像
这样的单元格数组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个字符串元素,这大大减慢了我的代码。有更好的方法吗?
答案 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'