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

Matrizen nach Anzahl der Zeilen sortieren

 

Kraftkleber
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 14.10.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.10.2016, 15:17     Titel: Matrizen nach Anzahl der Zeilen sortieren
  Antworten mit Zitat      
Moin,

ich hab lange nach einem Verfahren gesucht um Matrizen nach der Anzahl der Zeilen zu sortieren und hier nichts gefunden.

Hier ein Beispiel:
Code:
%
Matrix{1}{1}=rand(5,2)
Matrix{1}{2}=rand(7,2)
Matrix{1}{3}=rand(9,2)
 


Diese Matrizen sollen jetzt absteigend sortiert werden.
Das Ergebnis sollte dann so aussehen, das in einer neuen Matrix(sortmatrix) die Matrizen sortiert vorliegen. In diesem Fall würde dann die Matrix{1}{3} an erster Stelle der sortmatrix{1}{1} stehen und die Matrix{1}{2} an der Stelle sortmatrix{1}{2} und so weiter.

Es geht nicht nur darum 3 Matritzen zu sortieren sondern ein paar mehr. Beispiel dient nur der Veranschaulichung.

Gibts dafür ne einfache Lösung oder muss eine eine komplizierte Schleife schreiben ? An der komplizierten Schleife hab ich mich schon versucht jedoch war das nicht von Erfolg gekrönt . 😔

Mit freundlichen Grüßen
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 14.10.2016, 17:43     Titel: Re: Matrizen nach Anzahl der Zeilen sortieren
  Antworten mit Zitat      
Hallo Kraftkleber,

Ist es notwendig geschachtelte Cell-Arrays zu verwenden? Ich lasse das hier mal der Anschaulichkeit halber weg:
Code:

Matrix{1} = rand(5,2);
Matrix{2} = rand(7,2);
Matrix{3} = rand(9,2);
len = cellfun('size', Matrix, 1);
[dummy, sortIndex] = sort(len, 'descend');
SortedMatrix = Matrix(sortIndex);

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Kraftkleber
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 14.10.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.10.2016, 18:35     Titel:
  Antworten mit Zitat      
Hey, danke für die schnelle Antwort !

Das funktioniert genau so wie ich es brauche nur versteh ich nicht so ganz was der Code macht.
1. als erstes ermittelt er die Größe jeder Matrix und speichert das als Vektor. Für was steht die 1 am Ende ?
2. er sortiert den len Vektor nach der Größe und sortindex speichert dann quasi was an welche Stelle kommt ?
3. wie schließt der Code vom sortIndex auf die ursprünglichen Matrizen ?

Und ja die cell arrays brauch ich weil es mehrer solcher Matrix Package gibt . Hab nur um das Beispiel verständlich zu halten ein Package ausgewählt. Aber das sollte ich selber hin bekommen , muss ja dann nur noch ne For schleife drüber legen .

Code:
%
matrix{1}{1}=rand(12,2);
matrix{1}{2}=rand(3,2);
matrix{1}{3}=rand(7,2);
matrix{1}{4}=rand(9,2);
 
matrix{2}{1}=rand(17,2);
matrix{2}{2}=rand(6,2);
matrix{2}{3}=rand(7,2);
matrix{2}{4}=rand(20,2);
 
for i=1:2
    
len = cellfun('size', matrix{i}, 1);
[dummy, sortIndex] = sort(len, 'descend');
SortedMatrix{i} = matrix{i}(sortIndex);
end
 


Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 15.10.2016, 23:32     Titel:
  Antworten mit Zitat      
Hallo Kraftkleber,

Zitat:
1. als erstes ermittelt er die Größe jeder Matrix und speichert das als Vektor. Für was steht die 1 am Ende ?

Siehe doc cellfun , hier im Abschnitt "Backward compatibility": Der 'size'-Befehl nimmt als 3. Input die Dimension entlang der die Länge bestimmt werden soll, also wie in:
Code:
size(matrix{1}{1}, 1)

Zitat:
2. er sortiert den len Vektor nach der Größe und sortindex speichert dann quasi was an welche Stelle kommt ?

Siehe doc sort : Der 2. Output ist die Sortierungs-Reihenfolge.

Zitat:
3. wie schließt der Code vom sortIndex auf die ursprünglichen Matrizen ?

Das verstehe ich nicht. sortIndex ist die Reihenfolge, in der sortiert werden soll. Also verwendet man das einfach als Index. Versuche es einfach mal mit ein paar Zahlen aus:
Code:
x = rand(1,4)
[sortedX, index] = sort(x)
sortedX2 = x(sortIndex)

sortedX und sortedX2 sind identisch.

Gruß, Jan
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 - 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.