|
|
Wertevergleich zwischen Vektoren einer Zelle |
|
KaiS |

Forum-Century
|
 |
Beiträge: 102
|
 |
|
 |
Anmeldedatum: 19.04.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.03.2013, 21:38
Titel: Wertevergleich zwischen Vektoren einer Zelle
|
 |
|
 |
|
Hallo zusammen,
ich hätte ein Cell Array vorliegen.
Zum Beispiel:
Nun würde ich gerne jeden Vektor von A miteinander vergleichen und dann als Ergebnis herausbekommen, an welcher Stelle jedes Vektors gleiche Werte vorliegen.
Das heißt in unserem Beispiel, dass folgende Vergleiche automatisiert durchgeführt werden sollen:
- A{1} mit A{2}
- A{2} mit A{1}
- A{1} mit A{3}
- A{3} mit A{1}
- A{2} mit A{3}
- A{3} mit A{2}
Als Code könnte ich für den ersten Fall (für die anderen Fälle muss dann nur noch der Index von A angepasst werden) folgendes verwenden:
Dementsprechend würde ich beim 1. Fall als Ergebnis z.B. [3] (da die 3 nur an der dritten Stelle von A{1} vorkommt) herausbekommen. Im 2. Fall würde [1 2] (da die 3 an erster und zweiter Stelle in A{2} vorkommt) herauskommen usw.
Mein Problem ist jetzt, dass ich nach einer Lösung suche, wie ich diese Vergleiche automatisiert ablaufen lassen kann, weil ich A z.B. auch mal 4 Vektoren in der Zelle drinstehen haben könnte und dann noch mehr Vergleiche durchgeführt werden müssten.
Für den Fall, dass A sicher nur 3 Vektoren hat, hätte man einfach ein switch case programmieren können innerhalb einer for-Schleife mit i = 1:3, aber dann sind halt die Grenzen schon vorgegeben..
Hat da jmd eine Idee?
Vielen Dank!
LG
Kai
|
|
|
|
|
MaFam |

Forum-Meister
|
 |
Beiträge: 799
|
 |
|
 |
Anmeldedatum: 02.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2009b
|
 |
|
|
 |
|
Verfasst am: 10.03.2013, 12:55
Titel:
|
 |
Hallo,
grundsätzlich würde ich erstmal davon ausgehen, dass die Vergleiche A{1} mit A{2} und A{2} mit A{1} äquivalent sind. Wenn nicht, was ist der Unterschied?
Um das ganze zu automatisieren, würde ich eine Doppelschleife ansetzen, um die Elemente paarweise miteinander zu vergleichen. Im jeweiligen Vergleich würde ich die Schnittmenge der Vektoren berechnen. Es ergibt sich dann allerdings die Frage, ob die Schnittmenge nur elementweise (nur Zahlen, keine Vektoren in den Vektoren) berechnet werden soll.
Edit: Mir ist gerade klar geworden, wo der Unterschied liegt. Du willst ja auf die Positionen hinaus. Dann reicht es, dass Paar (i,j) einmal zu ermitteln. Man würde im selben Schleifendurchlauf (i,j) und (j,i) abhandeln.
Grüße, Marc
|
|
|
MaFam |

Forum-Meister
|
 |
Beiträge: 799
|
 |
|
 |
Anmeldedatum: 02.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2009b
|
 |
|
|
 |
|
Verfasst am: 10.03.2013, 13:33
Titel:
|
 |
Ich wollte eigentlich auf
hinaus, musste aber gerade feststellen, dass ia und ib nicht vollständig die Informationen über die Postionen enthalten. Das finde ich seltsam. Man müsste hier leider noch mit find() basierend auf C arbeiten...
|
|
|
KaiS |
Themenstarter

Forum-Century
|
 |
Beiträge: 102
|
 |
|
 |
Anmeldedatum: 19.04.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.03.2013, 20:36
Titel:
|
 |
Hi Marc,
danke für die Antwort. Ich versteh leider noch nicht so ganz, wie die Schleife genau aussehen soll.
Die Grenze ist klar, aber wie genau formuliere ich das denn, dass jeder Vektor miteinander verglichen wird? Die Anzahl der Vergleiche wächst ja, wenn ich ein A mit mehr Vektoren habe. D.h. bei 4 Vektoren bekomme ich (1,4),(4,1),(2,4),(4,2),(3,4),(4,4) als Vergleich hinzu und bei 5 Vektoren noch mehr..
Danke!
|
|
|
MaFam |

Forum-Meister
|
 |
Beiträge: 799
|
 |
|
 |
Anmeldedatum: 02.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2009b
|
 |
|
|
 |
|
Verfasst am: 10.03.2013, 21:14
Titel:
|
 |
Das ist doch ein 2 aus n Problem ohne Wiederholungen. Angenommen, du hast die Elemente A,B,C,D,E, dann gibt es die Paare:
i und j ->
A und B
A und C
A und D
A und E
B und C
B und D
B und E
C und D
C und E
D und E
Das lässt sich mit einer Doppelschleife realisieren, innerhalb derer gilt, dass j>i.
|
|
|
KaiS |
Themenstarter

Forum-Century
|
 |
Beiträge: 102
|
 |
|
 |
Anmeldedatum: 19.04.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.03.2013, 08:51
Titel:
|
 |
|
 |
|
Hi,
okay, danke dir! Ich habe mir die letzten Tage mal Gedanken gemacht. Mir ist zwar immer noch nicht 100%ig klar, wie du die Schleifen programmieren würdest, aber ich hab jetzt mal folgendes gemacht:
Allerdings liegt da noch iwo ein Bug und mir ist nicht klar wo. Folgendes Zahlenbeispiel:
Lässt man nun die beiden for-Schleifen durchlaufen, kriegt man fast überall richtige Ergebnisse bis auf:
Hierbei wird eigentlich der dritte Vektor mit dem ersten Vektor von A verglichen und deswegen müsste als Ergebnis eigentlich 2 rauskommen. Die 0 "verschluckt" Matlab scheinbar und ich weiß nicht warum.
Außerdem erhalte ich bei dem Vergleich (2,3) und (3,2) einmal eine "empty 1-by-0 matrix" und einmal "[]" als Ergebnis. Warum ist dies der Fall? Müsste nich bei beiden einfach ein leerer Vektor, also [] rauskommen?
----------------
Wenn ich nun dieses Konzept weiterentwickeln will und nun zusätzlich auch noch die Information mit herausfinden will, an welchen Stellen der jeweiligen Vektoren nicht nur generell gleiche Vektoren vorkommen, die auch im anderen Vektor vorkommen. D.h. ich möchte den Vergleich auf genaue Wertepaare einschränken.
Bsp. zum Verständnis:
A = {[1 2 3]; [2 3 4]}
--> Als Ergebnis möchte ich nun wissen, dass A{1}(2) = A{2}(1) und A{1}(3) = A{2}(2).
Mit der for-Schleife von oben würde ich nur wissen, dass an Stelle 2 und 3 von A{1} gleiche Werte sind verglichen mit A{2}. Aber theoretisch kanns dann auch sein, dass A{1}(2) = A{2}(2), was ja nicht stimmen würde..
Ist alles ein bisschen kompliziert, ich hoffe ihr versteht mich trotzdem
Eine mögliche Lösung wäre jede einzelne Zahl anstatt des ganzen Vektors vergleichen zu lassen mit dem o.g. find-Befehl, aber das erscheint mir ein bisl umständlich.. Vllt gibts ja eine elegantere Lösung?
Danke!
|
|
|
KaiS |
Themenstarter

Forum-Century
|
 |
Beiträge: 102
|
 |
|
 |
Anmeldedatum: 19.04.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.03.2013, 09:47
Titel:
|
 |
Ah Denkfehler, der Bug passt, weil er gar kein Bug ist. Hab (1,3) mit (3,1) verwechselt. Man kommt ja auch leicht durcheinander bei so vielen Vergleichen
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 12.03.2013, 10:28
Titel:
|
 |
Hallo Kai,
Zitat: |
Hierbei wird eigentlich der dritte Vektor mit dem ersten Vektor von A verglichen und deswegen müsste als Ergebnis eigentlich 2 rauskommen. Die 0 "verschluckt" Matlab scheinbar und ich weiß nicht warum. |
Nein. Nochmal von Hand:
Und hier wird das erste Element von A{3} in A{1} gefunden. Also ist die Antwort 1 korrekt.
Die 1-by-0 Matrix ist ebenfalls leer. Dies tritt bei vielen Funktionen auf, die nicht explizit leere Arrays abfangen. Je nach Matlab-Version kann dies unterschiedliche Auswirkungen haben.
Den weiteren Teil verstehe ich nicht. Der Vergleich funktioniert nur, wenn beide Vektoren gleich lang sind, oder?
Gruß, Jan
|
|
|
MaFam |

Forum-Meister
|
 |
Beiträge: 799
|
 |
|
 |
Anmeldedatum: 02.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2009b
|
 |
|
|
 |
|
Verfasst am: 12.03.2013, 12:01
Titel:
|
 |
|
|
KaiS |
Themenstarter

Forum-Century
|
 |
Beiträge: 102
|
 |
|
 |
Anmeldedatum: 19.04.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.03.2013, 06:08
Titel:
|
 |
@Jan:
Ja richtig, da hab ich die Vergleiche selbst durcheinander gebracht. Danke trotzdem!
Der weitere Teil hat sich erledigt, weil ich jetzt 3 for-Schleifen habe, die jeweils einen gesamten Vektor mit den einzelnen Werten der anderen Vektoren vergleicht.
@MaFam: Danke dir!
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| RSS
Hosted by:
Copyright © 2007 - 2025
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.
|
|