Reorganizando una matriz numpy 4d

Tengo una matriz numpy 4d que representa un conjunto de datos con instancias 3d. Digamos que la forma de la matriz es (32, 32, 3, 73257) .

¿Cómo puedo cambiar la forma de la matriz a (73257, 32, 32, 3) ?

— Actualización de la pregunta Parece que tanto la rollaxis como la transposición hacen el truco.

Gracias por responder!

La función np.transpose hace exactamente lo que desea, puede pasar un argumento de eje que controla qué eje desea intercambiar:

 a = np.empty((32, 32, 3, 73257)) b = np.transpose(a, (3, 0, 1, 2)) 

El eje de b son versiones permutadas de las de a: el eje 0 de b es el 3er eje de a, el eje 1 de b es el eje 0 de a, etc …

De esa manera, puede especificar cuál de los ejes de tamaño 32 desea en segundo o tercer lugar:

 b = np.transpose(a, (3, 1, 0, 2)) 

También da una matriz de la forma deseada, pero es diferente de la anterior.

Parece que np.rollaxis(arr, axis=-1) hará lo que quieras. Ejemplo:

 >>> arr = np.empty(32, 32, 3, 73257) >>> arr2 = np.rollaxis(arr, axis=-1) >>> arr2.shape (73257, 32, 32, 3) 

Esto hará que arr[i,j,k,l] == arr2[l,i,j,k] para todos los ijkl