我有CellArray1
个50个唯一字符串,CellArray2
有2000个唯一字符串(其中50个与CellArray1
中的字符串相同)。有没有办法在不使用循环的情况下从第二个单元阵列中的第一个单元阵列中找到所有50个唯一字符串的位置?
答案 0 :(得分:2)
是 - 以下代码演示了这一点:
cellArray1 = {'hello', 'world'};
cellArray2 = {'good', 'morning', 'world'};
overlap = find(ismember(cellArray2, cellArray1)};
这将在3
中返回值overlap
,因为cellArray2{3}
中出现了cellArray1
。
<强>更新强>
上面的代码返回索引,但不是原始的顺序。如果您需要原始订单,可以执行以下操作
overlap = cellfun(@(x)find(ismember(cellArray2, x)), cellArray1, 'uniformOutput', false);
overlapSorted = cell2mat(overlap);
可以说cellfun
实际上有一个隐式循环(但是所有向量操作都有隐式循环,真的);但其中一个结构将按照你的要求进行。如果你不需要它排序,我想象的第一个会明显更快。