In Matlab, possiamo comprimere attraverso le dimensioni di un array come questo:Come comprimere un array attraverso un insieme specifico di dimensioni?
M = rand(3,4,5);
myvec = M(:); % gives a 60-element vector
Credo sia chiamato serializzazione o appiattimento. L'ordine degli elementi è prima dim 1, poi dim2, quindi dim3, quindi ottieni [M(1,1,1); M(2,1,1); M(3,1,1); M(1,2,1); ...]
.
Ma ciò che voglio fare è collasso solo lungo le prime due dimensioni:
mymatrix = M(:: , :); % something that works like this?
invia una matrice di 12 x 5. Così, per esempio, si ottiene
[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)
...
]
in modo che la prima dimensione del mymatrix
è il "appiattita" 1 ° e 2 ° dimensioni dell'originale M
, ma conservando eventuali altre dimensioni.
In realtà ho bisogno di fare questo per le "3 dimensioni medie" di un array 5-dimensionale, quindi una soluzione generale sarebbe grandiosa! per esempio. W=rand(N,N,N,N,N); mymatrix = W(:, :::, :)
dovrebbe dare una matrice N x N^3 x N
se vedi cosa intendo.
Grazie
Perfetto, grazie! Avrei dovuto pensare a rimodellare. PS Ho appena pensato ad un altro modo che sembra funzionare: 'tmp = permute (M, [1,5,2,3,4]);', 'mymatrix = tmp (:, :)'. Non sono sicuro che funzionerà sempre? Ovviamente 'reshape' è ** molto ** preferibile. –