Verfasst am: 26.11.2013, 15:04
Titel: Matrizen vergleichen und ähnliche Einträge finden
Hallo,
ich komme aktuell mit meiner Programmierung nicht voran. Ich habe zwei Matrizen mit Messwerten, aus der ich nun eine Matrix machen möchte mit gemeinsamen Einträgen.
Hier sind die Matrizen einmal beispielhaft (als Integer) gezeigt:
Matrix1:
Zitat:
3 202 102 6 0
Matrix2:
Zitat:
42 341 102 6 0
Sobald sich der jeweils vierte Wert in den beiden Matrizen voneinander um weniger als 0.05 unterschiedet, sollen die beiden Zeilen von Matrix 1&2 in Matrix 3 geschrieben werden.
Also bei dem Beispiel oben:
Zitat:
3 202 102 6 0 42 341 102 6 0
Es kann jedoch sein (und daran scheitere ich momentan), dass mehrere Zeilen aus Matrix 1 mit der einen Zeile aus Matrix 2 übereinstimmen (und andersrum genauso). In diesem Fall sollte einfach nur die erste Zeile, bei der das Kriterium erfüllt wird in Matrix3 geschrieben werden und die anderen können vernachlässisgt werden.
Meine bisherigen Versuche verlaufen alle im Sand, die sind entweder falsch oder/und mit zu hohem Rechenaufwand.
Also die Einträge aus M1(6,: ) und M2(1,: ) aneinandergereiht.
UND: hier wäre jetzt auch für die Einträge Matrix1(7:10,4) - Matrix2(1,4) die Bedingung erfüllt, diese Einträge sollen aber NICHT mit übernommen werden.
Ich hoffe, dass ich mich verständlich ausgedrückt habe
Hi, danke für den Vorschlag. Er scheint jedoch noch nicht richtig zu funktionieren - Matrix3 hat lediglich 2 Einträge, was nicht realistisch ist.
- Der Befehl "treffer" ergibt mir als Ergebnis "240" zurück, sollte dort nicht ein Vektor rauskommen, der mir alle Zeilen nennt, in denen das Kriterium erfüllt wird?
- In der Matrix3 sind zwar die Werte aus M1 und M2 aneinandergehängt in einer Zeile, aber
Zitat:
matrix3(1,4) - matrix3(1,9) = 0.677007520935772
Sprich, in der Zeile, wo sich die Werte um max. 0.5 unterscheiden sollen, ist die Differenz 0.67.
Das zweite Argument von find sorgt dafür, dass nur der erste gefundene Eintrag übernommen wird. Du kannst die die Zeilen übrigens auch direkt von find geben lassen:
bitte immer zuerst an einem kleinem lauffähigen Beispiel ausprobieren,
damit wir und du die gleichen Daten zur Verfügung haben, sonst kann man ja keine Fehler feststellen.
basieren auf dem Vorschlag reichkrystofski, wäre das lauffähige Beispiel
dies:
Dann soll also doch über die Zeilen von M2 iteriert werden? Das war mir aus der Problemstellung nicht ganz klar.
Die Lösung von denny führt allerdings dazu, dass eine Zeile von m2 zwei Lösungen findet.
Hier nochmal ein Lösungsvorschlag für Iteration über M2, ohne doppelte Zeilenvorkommen/Matrix:
bitte immer zuerst an einem kleinem lauffähigen Beispiel ausprobieren,
damit wir und du die gleichen Daten zur Verfügung haben, sonst kann man ja keine Fehler feststellen.
Stimmt, ist logisch.
Mit der Programmierung von reichkrystofski bekomme ich bei dem Beispieldatensatz in der Tat die gleichen Ergebnisse, die er gepostet hat.
reichkrystofksi hat Folgendes geschrieben:
Die Lösung von denny führt allerdings dazu, dass eine Zeile von m2 zwei Lösungen findet.
Korrekt. M3(3,6:10) = M3(4,6:10).
Die 2. Lösung von reichkrystofski (von 12:39 Uhr) führt zu einer Matrix 4x10, wo genau der doppelte Eintrag von Denny nicht vorhanden ist.
Wenn ich diese Matrix für meinen kompletten Datensatz verwende (M1=328; M2=243 Einträge), dann komme ich auf 70 erfolgreiche Zuteilungen, was plausibel erscheint.
Ich kann denke ich auf jeden Fall erstmal damit arbeiten, vielen Dank euch beiden!
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
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.