WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Gleichen Werte aus zwei Vektoren suchen

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.08.2021, 16:01     Titel: Gleichen Werte aus zwei Vektoren suchen
  Antworten mit Zitat      
Hallo zusammen,

ich würde gerne die gleichen Werte aus zwei Vektoren herausfinden und in einer neuen Tabelle abspeichern lassen.
Anbei ein vereinfachtes Beispiel:

Code:
Matrix1=round(rand(20,1)*8);
Matrix2=round(rand(20,1)*8);

for i=1:1:length(Matrix1)-1
    if (Matrix1(i,1)==Matrix2(i+1,1))
    end
end


D.h. in diesem vereinfachem Beispiel würde ich gerne die gleichen Werte in einer Matrix abspeichern, sodass die neu kreirte Matrix dann in etwa so aussieht:
1 2
1 3 3
2 3 3
3 4 4 ....

In der ersten Spalte sollen die Werte der Matrix1 und in der zweiten die Werte der Matrix2 abgespeichert werden.

Das Beispiel macht vllt nicht so viel Sinn, aber in meinem komplexeren Beispiel vergleiche ich Matrizen mit mehreren Spalten. Und mit dem hier dargestellten Beispiel kann ich die Ergebnisse vorsortieren.

Hat jemand einen Tipp?

Viele Grüße und dankeschön


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.08.2021, 16:59     Titel:
  Antworten mit Zitat      
Hallo,

generell würde ich zur Verwendung von intersect raten.

Zitat:
sodass die neu kreirte Matrix dann in etwa so aussieht:
1 2
1 3 3
2 3 3
3 4 4 ....

Das ist ja gar keine Matrix, weil in der ersten Zeile weniger Einträge als in den anderen stehen.
Mir ist auch nicht klar, was die Bedeutung der einzelnen Spalten sein soll. In der ersten Spalten könnte z.B. der Wert stehen, aber warum ist das doppelt? In der zweiten Spalte könnte die Stelle stehen, an der der Wert im ersten Vektor das erste Mal vorkommt oder auch die Anzahl, wie oft er vorkommt.

Zitat:
Das Beispiel macht vllt nicht so viel Sinn, aber in meinem komplexeren Beispiel vergleiche ich Matrizen mit mehreren Spalten.

Dann wäre es hilfreich, als Beispiel auch zwei Matrizen mit beispielsweise 2-3 Spalten und 3-4 Zeilen zu verwenden und das passende Ergebnis. Wenn die Matrizen aus Zufallszahlen erzeugt werden, bitte den Seed angeben, weil sonst ja jeder andere Zufallszahlen bekommen kann, was die Nachvollziehbarkeit erschwert, z.B.
Code:


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.08.2021, 17:26     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für deine Antwort.
Die 1 und 2 sollten eigentlich über die Spalten 1 und 2 stehen, zur Vedeutlichung der Tabelle. Ist wohl leider verrutscht.
Mir ist wichtig, dass alle Paare aufgeführt werden und nicht nur die Anzahl der Paare gezählt werden. Aber rein theoretisch würde es reichen wenn nur ein Wert ausgegeben wird und nicht beide.

Ich habe das Beispiel nun um eine größere Matrix ergänzt und rng eingefügt.

Code:
rng(1);
Matrix1=round(rand(20,3)*8);
rng(2);
Matrix2=round(rand(20,3)*8);

M=[];

for i=1:1:length(Matrix1)
    for p=1:1:8
         matrix1i=(find(Matrix1)==p);
         matrix2i=(find(Matrix2)==p);
%          if [matrix1i] == [matrix2i]
%              M(i,1)=matrix1i;
%              M(i,2)=matrix2i;
%          end  
    end
end


Code:
c=intersect(Matrix1(:,1),Matrix2(:,1));


Ich habe auch den intersect Befehl ausprobiert, allerdings bekomme ich dann immer nur einmal den Wert zweier gleicher Werte zurückgegeben.

Viele Grüße
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.08.2021, 17:28     Titel:
  Antworten mit Zitat      
Hallo ich nochmal,

ich würde dann gerne in der Matrix M in der ersten Spalte die identischen Werte und in den anderen spalten die zugehörigen Werte der Matrix1 und Matrix2 abspeichern. Und das für alle Paare.

Beste Grüße
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.08.2021, 17:43     Titel:
  Antworten mit Zitat      
Hallo,

schreib doch bitte konkret, was das Ergebnis für das Beispiel sein soll.

Zitat:
in der Matrix M in der ersten Spalte die identischen Werte

Die identischen Werte in der ersten Spalte, oder was soll verglichen werden?

Zitat:
und in den anderen spalten die zugehörigen Werte der Matrix1 und Matrix2 abspeichern

Was heißt "zugehörig"? Die Werte der anderen Spalten?

Was ist, wenn ein Wert in der ersten Spalte mehrfach vorkommt?

Zitat:
Ich habe auch den intersect Befehl ausprobiert, allerdings bekomme ich dann immer nur einmal den Wert zweier gleicher Werte zurückgegeben.

intersect liefert ja optional mehrere Rückgabeargumente.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.08.2021, 17:51     Titel:
  Antworten mit Zitat      
Hallo Harald,

entschuldige meine nicht eindeutige Schreibweise.

Ich möchte die ersten beiden Spalten der Matrix1 und Matrix2 auf identische Werte vergleichen. Sodass ich am Ende folgendes Ergebnis in der Matrix Ma abgespeichert habe:

In der ersten Spalte befindet sich der "identische Wert"
In der zweiten Spalte befindet sich der Wert der Saplte 2 der Matrix1 zu dem identischen Wertepaar
In der dritten Spalte analog
In der vierten Saplte befindet sich dann der Wert der Spalte 2 der Matrix2 zu dem identischen Wertepaar.

Bei meinem Beispeil befindet sich in der ersten Zeile in der ersten Spalte sowohl bei der Matrix1 als auch bei der Matrix2 eine 3. Die Zeile der Tabelle M würde dann so aussehen:
3 6 8 4 8
Und dass dann für alle identishen Werte, auch doppelte, da die Werte der 2 und 3 Spalte stets unterschiedlich sind.

Ich hoffe ich konnte mein Problem besser veranschualichen.

Beste Grüße
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.08.2021, 20:01     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Ich hoffe ich konnte mein Problem besser veranschualichen.

Besser, aber leider immer noch nicht eindeutig. Am klarsten ist es wie gesagt, wenn du anhand des konkreten Beispiels wirklich hinschreibst, was du haben möchtest.

Zitat:
Und dass dann für alle identishen Werte, auch doppelte, da die Werte der 2 und 3 Spalte stets unterschiedlich sind.

Was soll dann passieren, wenn ein Wert in Spalte 1 von Matrix 1 doppelt vorkommt und in Spalte 1 von Matrix 2 dreifach? In welcher Reihenfolge sollen die Zeilen zu den doppelten Einträgen aufgeführt werden?

Ein Ansatz:
Code:
common = intersect(Matrix1(:,1), Matrix2(:,1))
filt1 = ismember(Matrix1(:,1), common);
gp1 = findgroups(Matrix1(filt1,1));
mat1Select = splitapply(@(x){x}, Matrix1(filt2,2:3), gp1)

filt2 = ismember(Matrix2(:,1), common);
gp2 = findgroups(Matrix2(filt2,1));
mat2Select = splitapply(@(x){x}, Matrix2(filt2,2:3), gp2)


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.08.2021, 13:51     Titel:
  Antworten mit Zitat      
Hallo Harald,

du hast recht. Das macht keinen Sinn. Ich habe das von mir gewünschte Ergebnis nochmal überdacht.

Eigentlich will ich nur wissen welche Kombinationen vorhanden sind und diese abspeichern.

D.h. ich will wissen ob es zu dem Wert 0, ... der Matrix1 den gleichen Wert in der Matrix2 gibt. Und das in einer Tabelle abspeichern, aber dann nur einmal.
Die generierten Zufallsmatrizen sind dann eher nicht so gut zur Verdeutlichung meines Problems.

Anbei ein neues Beispeil:
x1=[0 1 5 7 9 3 4 4 6 2 3 9];
x2=[9 9 7 5 6 4 1 1 2 1 1 1];

0 kein Paar,
1 ein Paar,
2 kein Paar,
3 Kein Paar,
4 ein Paar,
...

Und wenn ein Paar vorliegt soll das in der Matrix M gespeichert werden, also:
1
4
...

Beste Grüße
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.08.2021, 15:38     Titel:
  Antworten mit Zitat      
Hallo,

warum ist 2 kein Paar? Das kommt doch in beiden Vektoren vor?

Die Beschreibung klingt für mich wieder nach intersect , aber ich verstehe nicht, warum 2 nicht vorkommen soll. Und was ist mit 5,6,7,9?
Oder ist der entscheidende Punkt an 1 und 4, dass sie doppelt vorkommen? Allerdings die 1 nur in x2 doppelt und die 4 nur in x1?
Wenn die Fragestellung klar wäre, sollte die Lösung kein Problem sein. Leider ist mir die Fragestellung (weiterhin) nicht vollkommen klar.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.08.2021, 09:02     Titel:
  Antworten mit Zitat      
Hallo Harald,

die 2 ist ein Paar, übersehen, und die 5,6,7 und 9 habe ich nicht weiter angezeigt, aber
die 2, 4, 5, 6, 7 und 9 wären dann auch ein Paar.

Habe den intersect Ansatz gerade ausprobiert, sollte für mein neues gewünschtes Ergebnis auch funktionieren.

Vielen Dank für deine Antworten und deine Hilfe!
Beste Grüße
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.08.2021, 11:50     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich habe es wie gesagt mit deinem Ansatz ausprobiert allerdings kommt bei mir für mein neu gewünschtes Ergebnis nur kauderwelsch raus.

Wie vereinfacht sich dein Intersect Ansatz wenn ich das gewünschte Ergebnis wie in meiner Antwort von gestern um 13:51 erhalten möchte?

Ich bin in Matlab noch relativ neu...

Beste Grüße
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.08.2021, 12:08     Titel:
  Antworten mit Zitat      
Hallo Harald,

die Frage hat sich erledigt.Smile
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.