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