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

Selektion spezieller Zeilen aaus Matrix,

 

Maik aus Magdeburg

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.06.2013, 03:36     Titel: Selektion spezieller Zeilen aaus Matrix,
  Antworten mit Zitat      
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:
Code:

 m=0;
        for k=1:j
            if Loesungq(k,8)>0
                m=m+1;
                pLoesungq(m,:)=Loesungq(k,:);
            end
        end

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

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 28.06.2013, 08:34     Titel: Re: Selektion spezieller Zeilen aaus Matrix,
  Antworten mit Zitat      
Hallo Maik aus Magdeburg,

Man kann die Zahlen zunächst runden, z.B. mit
Code:
x = round(x * 10) / 10;


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:
Code:
m=0;
pLoesungq = zeros(size(Loesungq));
for k = 1:j
  if Loesungq(k,8)>0
     m=m+1;
     pLoesungq(m,:)=Loesungq(k,:);
  end
end
pLoesunq = pLoesungq(1:m, :);


Aber deutlich einfacher ist die vektorisierte Methode ohne FOR-Schleife:
Code:
pLoesungq = Loesungq(Loesungq(:, 8)>0, :);

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Maik aus Magdeburg

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.07.2013, 12:49     Titel:
  Antworten mit Zitat      
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
 
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 - 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.