|
|
Selektion spezieller Zeilen aaus Matrix, |
|
Maik aus Magdeburg |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 28.06.2013, 03:36
Titel: Selektion spezieller Zeilen aaus Matrix,
|
 |
|
 |
|
Hallo,
ich habe eine Matrix mit mehr als 1000 Zeilen und 10 Spalten. Jede Zeile steht für eine gefundene Lösung.
In den Spalten stehen mehrere Zahlen unterschiedlicher Länge. Im wesentlichen gibt es bis zu 8 unterschiedliche Lösungen. Welche Lösungen zusammengehören erkennt man an bestimmten Werten z.B. gleicher Wert in der ersten Spalte. Problem ist das diese Werte einer Lösungsgruppe nicht bis auf die letzte Nachkommstalle gleich sind. Wenn ich mit dem Befehl unique also die Anzahl der Lösungen zähle spuckt er mir nicht 8 sondern eventuell 28 aus.
Gibt es eine Möglichkeit das Matlab die Werte und alle Werte die ± 0,1 in dessen Umgebung liegen als ein Wert ansieht und somit als eine Lösung und diese dann zählt?
Außerdem wollte ich Fragen ob es einen Befehl gibt der der neben den einzelnen unterschiedlichen Lösungen (wie bei unique) auch gleich noch deren jeweilige Anzahl mit in die Matrix schreibt. So eine Art Histogramm, jedoch kann ein Histogramm nur in ganzzahlige Klassen einteilen.
Außerdem suche ich eine Möglichkeit auf eine kürzere Art und Weise Zeilen in dessen Spalten bestimmte Werte stehen aus Matrizen zu löschen. Mein derzeitiges Programm läuft zwar, wird jedoch zeilenmäßig sehr umfangreich wenn es mehrerer Selektierungsschritte gibt.
Mein derzeitiger Code für einen Selektierungsschritt ist wie folgt:
Es sollte auch irgendwie mit dem Befehl any funktionieren, aber da passiert bei mir nur murks.
Hoffe ihr könnt mir helfen.
MFG
|
|
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 28.06.2013, 08:34
Titel: Re: Selektion spezieller Zeilen aaus Matrix,
|
 |
Hallo Maik aus Magdeburg,
Man kann die Zahlen zunächst runden, z.B. mit
HIST und HISTC arbeiten auf Intervallen. Es wird also nicht geprüft, ob ein Element gleich einem Element aus der Such-List ist, sondern ob es zwischen zweien liegt. Wenn Du also zunächst einen der beiden Befehle verwendest, kannst Du hinterher UNIQUE auf den 2.ten Output anwenden. Dann entfällt auch das Runden.
Reservierst Du den benötigten Speicher für Loesungq vor der Schleife? Eine solche Pre-allocation ist sehr wichtig für die Performance. Da man ja vorher nicht weiß, wie viele Zeilen gefunden werden, nimmt man die Maximal-Anzahl und schneidet hinterher die nicht benötigten wieder ab:
Aber deutlich einfacher ist die vektorisierte Methode ohne FOR-Schleife:
Gruß, Jan
|
|
|
Maik aus Magdeburg |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 01.07.2013, 12:49
Titel:
|
 |
Hallo Jan, danke für die Antwort.
Der erste Gedanke ist auf jeden fall eine Überlegung Wert. Problem was ich jedoch derzeit habe ist, das manchmal die Werte für S0(Standartabweichung) von der einen Lösung bei 0.04 (mit minimaler Streuung von ±0.01) liegen und die einer anderen Lösung bei 0.09 (mit minimaler Streuung von ±0.01). Manche Lösungen haben auch ein S0 von 30 (mit Streuung von ±1).
Gibt es eine Möglichkeit die ersten beiden signifikanten Stellen rauszusuchen um diese dann mit x (je nach dem wo die signifikanten stellen stehen (vor oder hinter dem Komma)) zu multiplizieren um dann den Intervall für die Selektion der verschiedenartigen Lösungen anzugeben?
Das mit der Speichervorreservierung ist mir bekannt, hatte ich nur nicht mit drin im Quellcode.
Der letzte Tipp ist auf jeden Fall Gold wert. Sowas Platz- und Zeilensparendes habe ich gesucht.
Hoffe ihr könnt mir helfen.
MFG
|
|
|
|
|
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.
|
|