In Matlab, können wir über Dimensionen eines Array wie folgt zusammenbrechen:Wie reduziere ich ein Array über einen bestimmten Satz von Dimensionen?
M = rand(3,4,5);
myvec = M(:); % gives a 60-element vector
Ich denke, es heißt Serialisierung oder Abflachung. Die Reihenfolge der Elemente ist zuerst dim1, dann dim2, dann dim3 - so erhalten Sie [M(1,1,1); M(2,1,1); M(3,1,1); M(1,2,1); ...]
.
Aber was ich tun möchte, ist Kollaps nur entlang den ersten zwei Dimensionen:
mymatrix = M(:: , :); % something that works like this?
eine 12 x 5 Matrix zu geben. So zum Beispiel, erhalten Sie
[M(1,1,1) M(1,1,2) M(1,1,3) M(1,1,4) M(1,1,5)
M(2,1,1) M(2,1,2) M(2,1,3) M(2,1,4) M(2,1,5)
M(3,1,1) M(3,1,2) M(3,1,3) M(3,1,4) M(3,1,5)
M(1,2,1) M(1,2,2) M(1,2,3) M(1,2,4) M(1,2,5)
...
]
so dass die erste Dimension der mymatrix
ist die „abgeflacht“ 1. und 2. Abmessungen des Originals M
, aber alle anderen Dimensionen zu erhalten.
Eigentlich muss ich dies für die "mittleren 3 Dimensionen" eines 5-dimensionalen Arrays tun, also wäre eine allgemeine Lösung großartig! z.B. W=rand(N,N,N,N,N); mymatrix = W(:, :::, :)
sollte eine N x N^3 x N
Matrix geben, wenn Sie sehen, was ich meine.
Dank
Perfekter Dank! Sollte über eine Umgestaltung nachgedacht haben. PS Ich habe gerade an einen anderen Weg gedacht, der zu funktionieren scheint: 'tmp = permute (M, [1,5,2,3,4]);', 'mymatrix = tmp (:, :)'. Nicht sicher, ob es immer funktioniert? Natürlich ist "Umgestaltung" ** viel ** vorzuziehen. –