Ich möchte die gemeinsamen Elemente in mehreren Arrays (> = 2) von Strings finden. Eine ähnliche Frage ist here, und die Antwort schlägt vor, die Funktion intersect()
zu verwenden, jedoch funktioniert es nur für 2 Eingänge.Wie finden Sie gemeinsame Elemente in String-Zellen?
In meinem Fall habe ich mehr als zwei Zellen, und ich möchte eine einzige gemeinsame Teilmenge erhalten. Hier ist ein Beispiel dafür, was ich erreichen möchte:
c1 = {'a','b','c','d'}
c2 = {'b','c','d'}
c3 = {'c','d'}
c_common = my_fun({c1,c2,c3});
am Ende möchte ich c_common={'c','d'}
, da nur diese beiden Strings in allen Eingängen auftreten.
Wie kann ich dies mit MATLAB tun?
Vielen Dank im Voraus,
P. S. Ich brauche auch die Indizes von jedem Eingang, aber ich kann das wahrscheinlich selbst mit der Ausgabe c_common
tun, also nicht notwendig in der Antwort. Aber wenn jemand will, dass auch in Angriff zu nehmen, wird meine tatsächliche Ausgabe wie folgt sein:
[c_common, indices] = my_fun({c1,c2,c3});
wo indices = {[3,4], [2,3], [1,2]}
für diesen Fall. mit unique
und accumarray
Danke,
Sieht aus, als gäbe es einen Code, um dies unter File Exchange unter http://www.mathworks.com/matlabcentral/fileexchange/6144-mintersect-multiple-se-intersection zu tun. – edwinksl
Es sieht aus wie eine direkte sequentielle Schnittpunkt eines Paares von Zellen, aber das ist nicht besonders effizient, wie der Autor auch festgestellt. – edwinksl
@edwinksl Vielen Dank! Das macht den Trick, und für meinen Fall ist Effizienz kein großes Problem. Also, wenn Sie dies als Antwort posten möchten, werde ich akzeptieren. Nochmals vielen Dank :) – jeff