2016-04-22 5 views
0

Ich habe eine zwei unterschiedlich großen Matrizen, zum Beispiel:Finding gemeinsame Elemente in Matrizen unterschiedlicher Größe

A = [10 12 15 16 17 43 77]; 
B = [10 11 15 20 43 55 222 90 86]; 

Ich mag diese beiden Matrizen zum Vergleich der gleichen Werte, um herauszufinden, und speichern sie in einer neuen Variablen . Das Ergebnis sollte wie folgt aussehen:

C = [10 15 43]; 

Als ich neue Benutzer von MATLAB bin, wäre es schön, wenn mir jemand Ideen in Bezug auf dieses Problem gibt. Danke im Voraus.

+0

wollen Sie die ähnlichen Werte, die auch in der gleichen Position oder nur ähnliche Werte? – excaza

Antwort

5

Wenn die Größe der 2-Arrays gleich sind, tun einfach:

C = find(A==B); 

Es findet alle Elemente den Test erfüllt A==B; Dieser Test wird elementweise durchgeführt: Die Ausgabe ist eine Maske der gleichen Größe der Eingabearrays, bei der jedes Element wahr ist, wenn A(i)==B(i).

Für nicht gleich große Array, eine Lösung ist, um die Funktion aufzurufen intersect:

C = intersect(A,B); 

Es tut genau das, was Sie wollen, die gemeinsamen Werte in A und B. Hinweis bekommen, dass die Ausgangswerte sortiert werden . Wie durch excaza in den Kommentaren erwähnt, ist es möglich, die gemeinsamen Werte in der gleichen Reihenfolge zu erhalten, wie sie in Argument übergeben in der ersten Reihe erscheinen (A in diesem Beispiel), indem Sie die Option Hinzufügen 'stable' dem Aufruf:

C = intersect(A,B,'stable'); 
+0

Meine Arrays sind nicht gleich groß. Das ist das Problem @ Bentoy13 –

+0

Oh, ich lese zu schnell. Gib mir ein paar Minuten. – Bentoy13

+1

Übergeben des [''stable'' 'setOrder'-Parameters an' intersect'] (http://www.mathworks.com/help/matlab/ref/intersect.html?refresh=true#inputarg_setOrder) gibt die Werte in gleiche Reihenfolge wie A. Es könnte auch sinnvoll sein zu klären, was Sie mit "elementweise" für den "find" -Ansatz meinen, es ist intuitiv für diejenigen, die mit Array-Operationen vertraut sind, aber nicht unbedingt für neuere Benutzer. – excaza

0

Eine Alternative zu Bentoy13 Lösung wäre es, die Funktion zu verwenden ismember:

C = A(ismember(A,B)) 

Es dauert im Grunde die Werte von A, die

in B. sind
+0

Ich weiß nicht, wie das ein Downvote bekommen hat, es ist völlig richtig – Dan