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

Inhalte einer Matrix sortieren

 

mkalz
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 07.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2009, 22:37     Titel: Inhalte einer Matrix sortieren
  Antworten mit Zitat      
Hallo Matlab-Experten,

ich habe eine Frage zur Sortierung von Inhalten einer Matrix:

Ich habe eine Matrix in der in den ungeraden Zeilen jeweils Werte eines Index sind und in den geraden Zeilen jeweils Werte zwischen 0 und 1.

Hier ein Beispiel für die ersten beiden Zeilen:

657 483 23 1 345 41 89
0.67 0.65 0.63 0.59 0.45 0.32 0.18

Dies geht nun einige hundert Zeilen so weiter.

Mein Ziel ist es nun, die Sortierung der Zeilen so zu ändern, dass diese nicht nach den absteigenden Werten sortiert sind, sondern aufsteigend nach den Indexnummern in den ungeraden Zeilen. Jede gerade Zeile wäre dann nach dem aufsteigenden Index in der vorherigen ungeraden Zeile sortiert.

Das obigen Beispiel wäre dann so sortiert:

1 23 41 89 483 657
0.59 0.63 0.32 0.18 0.65 0.67

Kann mir jemand einen Tipp geben, wie ich das am einfachsten umsetzen kann?

Vielen Dank
Private Nachricht senden Benutzer-Profile anzeigen


Dagnabit
Forum-Century

Forum-Century


Beiträge: 244
Anmeldedatum: 23.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.05.2009, 08:45     Titel:
  Antworten mit Zitat      
Servus mkalz

kann es sein, dass Du Zeilen und Spalten verwechselst. Hat Deine Matrix nun die Dimension [2 x n] oder [n x 2].

Sei´s wie´s sei. Es gibt eine Sortierfunktion....

für den Fall [ 2 x n]:
Code:
[ B, ind] = sort(A',1);
Erg = A( :, ind(:,1));



für den Fall [ n x 2]:
Code:
[ B, ind] = sort(A,1);
Erg = A( ind(:,1), :);


lg
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
mkalz
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 07.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.05.2009, 13:19     Titel:
  Antworten mit Zitat      
Hallo Martin,

vielen Dank erst einmal für Deine rasche Antwort.

Dagnabit hat Folgendes geschrieben:
Servus mkalz

kann es sein, dass Du Zeilen und Spalten verwechselst. Hat Deine Matrix nun die Dimension [2 x n] oder [n x 2].



Ich habe mich etwas kompliziert ausgedrückt. Ich habe tatsächlich eine Matrix in der Form [306 x 2246] und in den ungeraden Zeilen sind jeweils Indexnummern und in den geraden Zeilen Werte zwischen 0 und 1. Im Moment sind die geraden Zeilen von den höchsten Werten bis zu den niedrigsten sortiert und die korresponierenden Indexwerte sind nicht chronologisch. Mein Ziel ist es nun, diese Matrix so zu sortieren, dass die Werte in den geraden Zeilen nach den Indexnummern 1 - 2246 sortiert sind.

Deine erste Lösung funktioniert jedenfalls schonmal für die Zeilen 1 und 2 - nun mich ich nur noch sehen, wie ich das auf die restlichen Zeilen anwenden kann.

Gruß

Marco
Private Nachricht senden Benutzer-Profile anzeigen
 
Schrank
Forum-Century

Forum-Century


Beiträge: 203
Anmeldedatum: 10.07.08
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 08.05.2009, 15:09     Titel:
  Antworten mit Zitat      
Hallo mkalz,
meinst du das so?
Code:

a=[2 4 5 1 7 8 9;0.67 0.65 0.63 0.59 0.45 0.32 0.18;3 11 10 12 6 14 13; 0.1 0.2 0.3 0.4 0.5 0.6 0.7];
groesse=(size(a));
index= a(1:2:end);
[werte indexneu] = sort(index);
werte = a(2:2:end);
neuematrix(:,2:2:groesse(1))=reshape(werte(indexneu),groesse(2),groesse(1)/2);
neuematrix(:,1:2:groesse(1))=reshape(1:length(werte),groesse(2),groesse(1)/2);
fertich=neuematrix'


Gruß Schrank
Private Nachricht senden Benutzer-Profile anzeigen
 
Dagnabit
Forum-Century

Forum-Century


Beiträge: 244
Anmeldedatum: 23.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.05.2009, 20:08     Titel:
  Antworten mit Zitat      
Servus mkalz

Also wenn ich mich jetzt mal nicht "verlesen" habe, ist es so, dass Du immer eine "Doppelzeile" sortiert haben würdest.
Also (1, 2), (3, 4) ...; Unabhängig davon was im nächsten Zeilenpaar steht.

Schrank´s Code sortiert Dir wirklich alle ungeraden Zeilen durch (Wenn Index 1 in der letzten ungeraden Zeile steht, steht sie nach Schrank´s Sortierung in der ersten Zeile an erster Stelle).

Folgender Code sortiert nur zeilenweise (Wenn Index 1 in der letzten ungeraden Zeile steht, steht sie nach der Sortierung wieder in der letzten ungeraden Zeile aber an erster Stelle).

Code:
[ z, s] = size(inputMatrix);
 
for i = 1 : 2 : z-1
    A = inputMatrix(i : i+1, :);
    [ B, ind] = sort(A',1);
    outputMatrix(i : i+1, :) = A( :, ind(:,1));
end



Unschönerweise hat mein Code eine Schleife. Womöglich kann Schrank Dir das selbe Ergebnis ohne Schleife erzeugen. Ich bin und bleibe leider ein Schleifen- Fetischist. Wink

lg
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
mkalz
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 07.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.05.2009, 23:46     Titel:
  Antworten mit Zitat      
Hallo Schrank, hallo Martin,

vielen herzlichen Dank für Eure tolle Unterstützung. Beide Lösungen waren interessant - ich habe mich nun für die letzte Lösung entschieden.

Marco
Private Nachricht senden Benutzer-Profile anzeigen
 
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 - 2024 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.