0

我有CellArray150 个唯一字符串和CellArray22000 个唯一字符串(其中 50 个与 中的相同CellArray1)。有没有办法在不使用循环的情况下从第二个单元格数组中的第一个单元格数组中找到所有 50 个唯一字符串的位置?

4

1 回答 1

2

是的 - 以下代码演示了这一点:

cellArray1 = {'hello', 'world'};
cellArray2 = {'good', 'morning', 'world'};
overlap = find(ismember(cellArray2, cellArray1)};

这将返回 in 中的值3overlap因为cellArray2{3}出现在 中cellArray1

更新

上面的代码返回索引,但不是按照原始顺序。如果您需要原始订单,您可以执行以下操作

overlap = cellfun(@(x)find(ismember(cellArray2, x)), cellArray1, 'uniformOutput', false);
overlapSorted = cell2mat(overlap);

可以说它cellfun实际上有一个隐式循环(但是所有向量操作都有隐式循环,真的);但是其中一种结构可以满足您的要求。如果您不需要对其进行排序,我想第一个会明显更快。

于 2013-07-25T19:59:39.617 回答