2013-10-29 13 views
7

Possiedo un array numpy di forma 4 dimensioni (N, N, Q, Q). Quindi, dato un indice di riga e colonna (i, j), mat[i,j] è una matrice QxQ. Voglio rimodellare questa matrice per modellare (N*Q, N*Q) tale cheRimodella l'array di numpy 4d su array 2d preservando le posizioni degli array

array([[[[ 0, 1], 
     [ 2, 3]], 

     [[ 4, 5], 
     [ 6, 7]]], 


     [[[ 8, 9], 
     [10, 11]], 

     [[12, 13], 
     [14, 15]]]]) 

va a

array([[ 0., 1., 4., 5.], 
     [ 2., 3., 6., 7.], 
     [ 8., 9., 12., 13.], 
     [ 10., 11., 14., 15.]]) 

Si può vedere che mat[0,0] va a new_mat[0:2, 0:2]. Attualmente mat.reshape(N*Q, N*Q) prende mat[0,0] a new_mat[0:4, 0] (che è ciò che non voglio). Come posso usare reshape o rollaxis o qualcosa di simile per rimodellare questo array? Alla fine voglio tracciarlo con imshow, sono attualmente bloccato. Immagino sia facile da fare, non l'ho ancora capito.

risposta

5

Non importa, l'ho capito. np.swapaxes(1, 2) era il pezzo mancante di cui avevo bisogno.

La risposta è solo per fare mat.swapaxes(1, 2).reshape(N*Q, N*Q).

Sentirsi stupidi per postare senza tentare di capirlo da troppo tempo, ma lascerò perdere così altri potranno trarne beneficio.