2013-07-25 28 views
0

我有CellArray1有50个唯一字符串,而CellArray2有2000个唯一字符串(其中50个与CellArray1中的那些字符串相同)。有没有办法从第二个单元格数组中的第一个单元格数组中找到所有50个唯一字符串的位置,而不使用循环?在Matlab中同时查找单元格数组中的多个值

+0

结果是否需要排序 - 换句话说,如果第一个数组是{'A','B','C'},第二个数组是Z ... A,你会希望答案是[26,25,24]还是[24,25,26]可以接受? – Floris

回答

2

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

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

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

UPDATE

上面的代码返回的索引,而不是在原始的顺序。如果你需要的原始顺序,你可以做以下

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

它可以说,cellfun实际中有一个隐含的循环(但随后向量操作有隐含的循环,真的);但其中一个结构将会按照你的要求做。如果你不需要它分类,我想,第一个将显着加快。

相关问题