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

Problem mit reshape

 

p.nietnagel
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 19.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.02.2010, 22:29     Titel: Problem mit reshape
  Antworten mit Zitat      
Hallo,

eigentlich kam ich bisher mit "reshape" immer gut klar, aber irgendwie krieg ich eine bestimmte Matrix nicht "gereshaped".
Die Matrix (im Anhang) hat eine Größe von 20 x 10. Ich möchte sie zu einer Matrix 50 x 4 reshapen.
Ich hab folgendes versucht:
Code:

permmymatrix = permute(mymatrix,[2,1]);
fertig = reshape(permmymatrix,50,4);
 

weil ja in der Dokumentation von "reshape" steht, dass dabei spaltenweise vorgegangen wird.
Dann hab ich es ohne "permute" verscuht, das klappte natürlich nicht.
Wie bekomme ich meine Werte in die richtige Reihenfolge?

Zur Erklärung: meine Ausgangsmatrix 20 x 10 enthält (blumig dargestellt:) 4 Obstsorten (Apfel, Birne, Kirsche, Erdbeere) und jede dieser Obstsorten liegt in jeweils 5 Größen vor. Ergibt also die 20 Zeilen der ersten Dimension. Die zweite Dimension sind 10 Leute, die eben jeweils diese 4 Obstsorten in jeweils 5 Größen besitzen.
Meine 50 x 4 Matrix soll so aussehen: die 4 Spalten (2. Dimension) sind die Obstsorten und zeilenweise sollen immer die 5 Größen pro Leut angeordnet sein. Also: 1. Zeile: Größe 1 von Leut 1; 2. Zeile Größe 2 von Leut 1; 3. Zeile Größe 3 von Leut 1; usw.

Was hab ich bei meinem Versuch falsch gemacht?


Vielen Dank im Voraus für die Hilfe!


Viele Grüße,
p.nietnagel

mymatrix.mat.zip
 Beschreibung:

Download
 Dateiname:  mymatrix.mat.zip
 Dateigröße:  2.04 KB
 Heruntergeladen:  423 mal
Private Nachricht senden Benutzer-Profile anzeigen


LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.02.2010, 10:12     Titel:
  Antworten mit Zitat      
Hallo,

ich bin mir nicht sicher, ob ich richtig verstanden habe, wie Du das ganze umsortiert haben willst, aber ich würde das so machen:

Code:

D = reshape(mymatrix,[5,40]);
M = [D(:,1:4:end),D(:,2:4:end),D(:,3:4:end),D(:,4:4:end)];
K = reshape(M,[50,4]);
 


Viele Grüße,

LittleX
Private Nachricht senden Benutzer-Profile anzeigen
 
p.nietnagel
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 19.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.02.2010, 12:07     Titel:
  Antworten mit Zitat      
Sorry für die späte Antwort. Ich bin erst jetzt dazu gekommen, das zu testen.
Und: Tausend Dank LittleX! Das hat funktioniert! Ist genau das, was ich haben wollte!!!

Nur habe ich leider noch nicht ganz verstanden, warum man das so umständlich machen muss. Für eine kurze Erklärung zum Verständnis wäre ich sehr dankbar.

Viele Grüße,
p.nietnagel
Private Nachricht senden Benutzer-Profile anzeigen
 
p.nietnagel
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 19.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.02.2010, 12:20     Titel:
  Antworten mit Zitat      
Noch ein Nachtrag:
ich hatte selbst auch eine umständliche Lösung probiert, die zwar ähnlich ist wie Deine, LittleX, aber wohl doch irgendwo einen entscheidenden Fehler beinhaltet. Leider weiß ich nicht, an welcher Stelle:
Code:

load mymatrix
Apfel = [];
Birne = [];
Kirsche = [];
Erdbeere = [];
sortiert = [];

for i = 1:size(mymatrix,2)
    Apfel = mymatrix(1:5);
    Birne = mymatrix(6:10);
    Kirsche = mymatrix(11:15);
    Erdbeere = mymatrix(16:20);
    sortiert(i,:,:,:,:) = [Apfel; Birne; Kirsche; Erdbeere];
end

size(sortiert) % sollte sein: 10 (Leute), 4 (Obstsorten), 5 (Größen)
tmp_sortiert = permute(sortiert,[1,3,2]);
size(tmp_sortiert)  % sollte sein: 5 (Größen, 10 (Leute), 4 (Obstsorten)
finally = reshape(tmp_sortiert,50,4);
 


Da stimmten dann die Werte leider nicht, wenn ich gecheckt hab:
Code:
mymatrix(7,3)
% und
finally(12,2)




Danke für die Hilfe! Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.02.2010, 14:27     Titel:
  Antworten mit Zitat      
Hallo,

die Frage ist halt wie Du das angeordnet haben willst.

Meine erste Lösung hat die einzelnen Obstsorten spaltenweise abgearbeitet (also erst den Block Apfel spalten weise in die erste Spalte geschrieben, dann den Block Birne usw). Dazu musste ich in einem Zwischenschritt die Daten bisschen umsortieren.

Code:

M = reshape(mymatrix',50,4);
 

Damit hättest Du auch die Obstsorten in den Spalten, aber halt zeilweisen ausgelesen. Das hier entspricht dann auch der Variante mit permute (ist mit den Parametern nichts anderes als transponieren).

Viele Grüße,
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.