2013-07-25 3 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)}; 

Это будет возвращать значение 3 в overlap так cellArray2{3} появляется в cellArray1.

UPDATE

Приведенный выше код возвращает индексы, но не в порядке оригинала. Если вам нужен оригинальный заказ, вы можете сделать следующее

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

Можно утверждать, что на самом деле cellfun имеет неявный цикл в нем (но тогда все векторные операции имеют скрытые петли, на самом деле); но одна из этих конструкций будет делать то, о чем вы просили. Я не думаю, что если вам это не понадобится, первое будет значительно быстрее.

Смежные вопросы