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

2D-Matrix in 3D umwandeln

 

gui_einsteiger
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 08.03.12
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 08.07.2014, 16:18     Titel: 2D-Matrix in 3D umwandeln
  Antworten mit Zitat      
Hallo,

habe folgendes Problem:

ich habe Messwerte (3120x160) als 2D-Matrix vorliegen. Daraus möchte ich mir eine 3D-Matrix erstellen, mit den Dimensionen 120X160x26.

Meine Daten sind dabei folgendermaßen aufgebaut: pro Matrix in 3D also z.B. für (:,:,1) benötige ich die ersten 120 Zeilen meiner 2D-Matrix, für (:,:,2) die Zeilen 121 bis 240 usw.

Gibt es hierfür einen Matlab-Befehl? Reshape hilft mir ja nicht wirklich weiter.
Das ganze lässt sich zwar mit einer Schleife lösen, ist aber eher unschön. Vor allem kann es sein dass meine Datenmenge und somit die 3. Dimension der 3D-Matrix noch größer wird und das mit der Schleife so bestimmt nicht die schnellste Lösung bezüglich Rechenzeit ist.

Schon mal Danke im Voraus.

Gui_Einsteiger
Private Nachricht senden Benutzer-Profile anzeigen


Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 08.07.2014, 17:20     Titel:
  Antworten mit Zitat      
Hallo,

das geht schon mit reshape. Das ist aber immer etwas Hirnschmalz. Das hier sollte funktionieren, ist aber noch nicht perfekt. Vermutlich geht es noch viel einfacher...
Code:
D = reshape(1:3120*160,3120,160);

D=D';
R = reshape(D,160,120, 26);
D=D';
R = permute(R,[2,1,3]);
all(all(R(:,:,1) == D(1:120,:)))
all(all(R(:,:,2) == D(121:240,:)))
all(all(R(:,:,17) == D((1+16*120):(17*120),:)))
Aber zumindest ein Ansatz Smile

Aber das rauszufinden muss sich auch erstmal lohnen. Wenn du das nicht oft machen musst, dann ist oft die simple Schleife besser
Code:
R2 = zeros(120,160,26);
for k = 1:26
    R2(:,:,k) = D((1+(k-1)*120):(k*120),:);
end

all(all(all(R==R2)))

Viele Grüße,
Nras
Private Nachricht senden Benutzer-Profile anzeigen
 
gui_einsteiger
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 08.03.12
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 09.07.2014, 08:38     Titel:
  Antworten mit Zitat      
Hallo,

danke für den Ansatz. Ich denke dass ich ohne Schleife besser dran bin, da die Datenmenge in der Z-Dimension noch viel größer werden kann.

Was ich allerdings nicht kapiere sind die letzten 3 Zeilen Code von Nras. Was bringen mir diese? Wenn ich richtig liege sehen meine Daten nach dem permute-Befehl bereits so aus wie gewünscht.

Viele Grüße
gui_einsteiger
Private Nachricht senden Benutzer-Profile anzeigen
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 09.07.2014, 09:07     Titel:
  Antworten mit Zitat      
Hallo,

im Prinzip reichen diese Zeilen hier:
Code:
D = reshape(1:3120*160,3120,160);   % Daten erzeugen
R = reshape(D',160,120, 26);        % In Form pressen
R = permute(R,[2,1,3]);             % erste und zweite Dimension tauschen

Der Rest war bloß zur Kontrolle, dass auch alles passt. Ich hatte das einfach dringelassen, damit du dich auch davon überzeugen kannst, dass das passt.

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