|
|
Matrix: Vergleiche Zeilen mit gleichem z-Wert und gib Max |
|
Nekrokeks |

Forum-Anfänger
|
 |
Beiträge: 16
|
 |
|
 |
Anmeldedatum: 12.12.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 23.06.2015, 10:58
Titel: Matrix: Vergleiche Zeilen mit gleichem z-Wert und gib Max
|
 |
|
 |
|
Hallo liebes Forum,
ich schreibe mir im Moment ein Skript zur Datenauswertung zusammen.
In den ersten Zeilen lösche ich alle Nullzeilen aus der Ax2-Matrix (A ist bei mir im Millionen-Bereich) und Runde alle Werte der z-Koordinate auf 2 Dezimalstellen. Also meine Matrix sieht so aus:
Simulationsergebnis |||| zugehörige Z-Koordinate
. |||| .
. |||| .
usw.
Ok das trägt hoffentlich zum Verständnis bei, jetzt mein Problem:
Ich möchte alle gleichen Z-Koord. im Simulationsergebnis miteinander vergleichen und möchte nur die Zeile mit dem Maximalen Simulationsergebnis behalten. Alle anderen sollen gelöscht werde.
Ich habe es so versucht: (TrueData ist meine Matrix)
Leider klappt es so nicht. Ich vermute, dass die letzte Zeile
nicht in Ordnung ist, aber ich weiß nicht wieso. ich habe das in meinem Code schonmal erfolgreich zum Löschen der Nullzeilen verwendet:
Wo ist mein denkfehler?
Vielleicht hat auch jemand einen Vorschlag, wie ich es eleganter lösen kann... Denke diese Schleifen werden mein Programm bei 1 Million durchläufen schon sehr langsam werden lassen
Viele Grüße
Nekro
|
|
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 23.06.2015, 12:33
Titel: Re: Matrix: Vergleiche Zeilen mit gleichem z-Wert und gib Ma
|
 |
|
 |
|
Hallo Nekrokeks,
Zitat: |
Also meine Matrix sieht so aus:
Simulationsergebnis |||| zugehörige Z-Koordinate
. |||| .
. |||| .
usw. |
Ich verstehe nicht, wie diese Grafik eine Ax2-Matrix wiedergibt. Was bedeuten die Punkte und die Bars?
Poste lieber ein kleines Beispiel in valider Matlab-Syntax.
Zitat: |
Ich möchte alle gleichen Z-Koord. im Simulationsergebnis miteinander vergleichen und möchte nur die Zeile mit dem Maximalen Simulationsergebnis behalten. Alle anderen sollen gelöscht werde. |
Ich habe gestern eine fast identische Frage in einem anderen Matlab-Forum gelesen. Verblüffend.
Der gepostete Code läuft nicht, weil Klammern falsch gesetzt sind:
Du lässt eine Schleife über die Anzahl der Zeilen der Input-Matrix laufen. Zwischendurch verkleinerst Du allerdings diese Matrix. Das muss scheitern.
Das ist merkwürdig! Wozu benutzt Du hier eine Schleife? Der Inhalt hängt ja gar nicht von i ab, also kannst Du das FOR auch einfach weglassen.
Zitat: |
Vielleicht hat auch jemand einen Vorschlag, wie ich es eleganter lösen kann... Denke diese Schleifen werden mein Programm bei 1 Million durchläufen schon sehr langsam werden lassen :( |
Wieso denkst Du das? Eine Schleife mit 1e6 Iterationen benötigt zwar messbar viel Zeit, aber dass man nun vor dem Rechner sitzt und wartet ist doch eher unwahrscheinlich bei so wenigen Zahlen.
Aber die Matrix immer wieder zu verkleinern ist eine sehr starke Bremse. Denn mit jedem Löschen muss Matlab eine komplette neue Matrix im Speicher reservieren und die alten Daten kopieren. Datei können im schlimmsten Fall 1e6*1e6*8/2 Speicher-Zugriffe nötig sein und das bringt einen Rechner schon zum Schwitzen.
Vorschlag:
Gruß, Jan
|
|
|
Nekrokeks |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 16
|
 |
|
 |
Anmeldedatum: 12.12.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 24.06.2015, 10:33
Titel:
|
 |
|
 |
|
Hallo Jan,
danke für deine Antwort.
Zitat: |
Ich verstehe nicht, wie diese Grafik eine Ax2-Matrix wiedergibt. Was bedeuten die Punkte und die Bars?
Poste lieber ein kleines Beispiel in valider Matlab-Syntax. |
Ja ok das war nur verwirrend. In meinem Testbeispiel ist meine Matrix ein 28200x2 Double, aber in meiner echten Simulation werden es über 1 Millionen sein...
Zitat: |
Ich habe gestern eine fast identische Frage in einem anderen Matlab-Forum gelesen. Verblüffend. |
In der Tat ein lustiger Zufall. Ich bin aber in keinem weiteren Matlab-Forum angemeldet und hatte mich vorgestern auch noch nicht mit diesem Teil befasst - falls du sowas meinst.^^
Zitat: |
Der gepostete Code läuft nicht, weil Klammern falsch gesetzt sind: |
Ja stimmt in der ersten Zeile sehe ich das, aber im anderen Fall kann ich grade nicht erkennen wo die öffnende Klammer fehlt...
Das mit der for-Schleife war natürlich quatsch - da habe ich nicht ordentlich nachgedacht.
Danke für den Vorschlag. Komme leider bei dem Schritt mit dem Index nicht mehr ganz mit. Und wenn ich den Code copy-paste kriege ich nen error:
Error using horzcat
Dimensions of matrices being concatenated are not consistent.
Error in Vorschlag_Jan (line 17)
Index = [diff(T(:,2)) ~= 0, true];
Also du sortierst die Reihen und nimmst auch noch die Indizes seperat auf. Dann bildest du die Differenz aller Z-Koordinaten. Aber immer nur die Differenz der anliegenden Koordinate, richtig? Das verstehe ich nicht genau, warum du das machst. Die Z-Koord liegen ja jetzt unsortiert in der Matriox T vor.
Verstehe von der Syntax leider auch das "true" nicht. Du öffnest ja eine Matrix mit Namen "index" und in der ersten Spalte sind die Differenzern und in der zweiten Spalte dann was?
Dass die Z-Koord jetzt nicht sortiert sind wusstest du wahrscheinlich nicht. (Siehst ja keine Daten) Also wenn ich jetzt nach z sortiere und dann nach dem anderen:
und dann diese Differenz bilde, dann kriege ich sehr viele Nullen und bei Sprüngen in der z-Koordinate etwas anderes. Aber ich verliere eine Zeile, richtig?
Komme noch nicht ganz klar^^
|
|
|
|
|
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.
|
|