Я хочу найти общие элементы в нескольких (> = 2) ячейках массивов строк.Как найти общие элементы в ячейках строк?
Связанный с этим вопрос: here, и ответ предлагает использовать функцию intersect()
, однако она работает только для 2 входов.
В моем случае у меня более двух ячеек, и я хочу получить одно общее подмножество. Вот пример того, что я хочу добиться:
c1 = {'a','b','c','d'}
c2 = {'b','c','d'}
c3 = {'c','d'}
c_common = my_fun({c1,c2,c3});
в конце концов, я хочу c_common={'c','d'}
, так как только эти две строки имеют место во всех входах.
Как это сделать с помощью MATLAB?
Спасибо заранее,
P.S. Мне также нужны индексы с каждого входа, но я, вероятно, могу сделать это сам, используя вывод c_common
, поэтому в ответе не обязательно. Но если кто-то хочет, чтобы решить, что тоже, мой фактический объем производства будет выглядеть следующим образом:
[c_common, indices] = my_fun({c1,c2,c3});
indices = {[3,4], [2,3], [1,2]}
, где для этого случая.
Спасибо,
Похоже, что существует код для этого на Файлообменнике по адресу http://www.mathworks.com/matlabcentral/fileexchange/6144-mintersect-multiple-set-intersection. – edwinksl
Это похоже на прямое последовательное пересечение пары ячеек, но это не особенно эффективно, как отметил автор. – edwinksl
@edwinksl Большое вам спасибо! Это делает трюк, и для моей эффективности дела не очень большая проблема. Поэтому, если вы хотите опубликовать это как ответ, я соглашусь. Еще раз спасибо :) – jeff