0
我有CellArray1
有50个唯一字符串,而CellArray2
有2000个唯一字符串(其中50个与CellArray1
中的那些字符串相同)。有没有办法从第二个单元格数组中的第一个单元格数组中找到所有50个唯一字符串的位置,而不使用循环?在Matlab中同时查找单元格数组中的多个值
我有CellArray1
有50个唯一字符串,而CellArray2
有2000个唯一字符串(其中50个与CellArray1
中的那些字符串相同)。有没有办法从第二个单元格数组中的第一个单元格数组中找到所有50个唯一字符串的位置,而不使用循环?在Matlab中同时查找单元格数组中的多个值
是 - 下面的代码演示了这一点:
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
实际中有一个隐含的循环(但随后向量操作有隐含的循环,真的);但其中一个结构将会按照你的要求做。如果你不需要它分类,我想,第一个将显着加快。
结果是否需要排序 - 换句话说,如果第一个数组是{'A','B','C'},第二个数组是Z ... A,你会希望答案是[26,25,24]还是[24,25,26]可以接受? – Floris