2013-07-25 43 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實際中有一個隱含的循環(但隨後向量操作有隱含的循環,真的);但其中一個結構將會按照你的要求做。如果你不需要它分類,我想,第一個將顯着加快。

相關問題