2017-06-05 5 views
1

zu reduzieren ich keine gute Lösung für diese finden könnte:Wie Untermatrizen einer Matrix stapeln Dimensionalität

Ich habe eine Matrix dieser Größe: 60x10x3

Und ich will es verwandeln sich in eine Matrix von dieser Größe: 600x3

Grundsätzlich I die Matrizen 10 mit der Dimension 60x3 nebeneinander in der ersten Dimension stapeln will.

Wie erreiche ich das elegant in Matlab?

Antwort

1

Es scheint, dass ich nicht verstehe, was die beabsichtigte Ausgabe ist, aber hier sind zwei verschiedene Möglichkeiten, um es zu erreichen. Ich habe die Schleife hinzugefügt, um verschiedene Zahlen zu erstellen, damit die Ergebnisse untersucht werden können.

Methode 1 - Stapel vertikal oder horizontal

s = zeros(60,10,3); 
for x = 1:9 
    s(:,x,:) = x; 
end 
t = reshape(s, 600, 3); %vert 
u = t'; %hori 

Methode 2 - 3. Dimension Vertikal Stapel oder horizontal

s = zeros(60,10,3); 
for x = 1:9 
    s(:,x,:) = x; 
end 
t = [s(:,:,1) , s(:,:,2), s(:,:,3)]; % hori 
t = [s(:,:,1) ; s(:,:,2); s(:,:,3)]; % vert 

Hoffe, dass es hilft, aber dies zeigt, dass es mehrere Möglichkeiten, um die gleiche Ausgabe in Matlab zu erreichen. Sehr mächtiges Werkzeug in der Tat. Hier

+0

Ich glaube, ich sogar eine (ziemlich hässlich) Lösung selbst gefunden, deshalb frage ich, danke für verschiedene Möglichkeiten zeigt. Grundsätzlich habe ich 10 Sätze von 60 Messungen im Laufe der Zeit. Ich sehe diese 10 Sätze als unabhängige Messungen. Grundsätzlich 600 Datenpunkte, daher muss ich sie nicht logisch trennen – Jonas

1
A = rand(60, 10, 3); 
B = reshape(A, [], size(A, 3)); 

sollte für alle Dimensionen von A funktionieren.

0

ist eine Lösung, die

Stapel [s] die Matrizen 10 mit der Dimension 60x3 nebeneinander in der ersten Dimension.

a = rand(60,3,10); 
% swap the 2nd and 3rd dimention 
b = permute(a,[1,3,2]); 
% condense to 2d 
c = b(:,:); 
% reshape x, y and z seperately so each group of 60 xs/ys/zs appends to the end of the previous group 
x=reshape(c(:,1:3:end),[],1); 
y=reshape(c(:,2:3:end),[],1); 
z=reshape(c(:,3:3:end),[],1); 
% condense to one 600*3 matrix 
d = [x y z]; 
Verwandte Themen