2010-04-14 16 views
7

tengo una matriz 3d, a, de forma decir a.shape = (10, 10, 10)Preservar las dimensiones de una rebanada de un Numpy matriz 3d

Cuando rebanar, las dimensiones son squeezed automáticamente es decir

a[:,:,5].shape = (10, 10)

I' d desea conservar el número de dimensiones pero también asegúrese de que la dimensión que se apretó es la que muestra 1 es decir

a[:,:,5].shape = (10, 10, 1)

he pensado en volver a colar la matriz y pasar ndmin pero que aumenta las dimensiones adicionales del inicio de la tupla forma, independientemente de donde vino de la rodaja de la matriz a.

Respuesta

12
a[:,:,[5]].shape 
# (10,10,1) 

a[:,:,5] es un ejemplo de basic slicing.

a[:,:,[5]] es un ejemplo de integer array indexing - combined with basic slicing. Cuando se utiliza la indexación de matriz de enteros, la forma resultante siempre es "identical to the (broadcast) indexing array shapes". Desde [5] (como una matriz) tiene forma (1,), a[:,:,[5]] termina teniendo forma (10,10,1).

+0

Gracias, sin embargo, debo agregar que estoy implementando un método '__getitem__' y por lo tanto soy reacio a alterar los argumentos de los sectores: vea las reglas de edición – Brendan

+1

numpy para la indexación son lo suficientemente complicadas. Crear un '__getitem__' que altere esas reglas puede estar causando problemas. ¿No sería mejor exigir a los usuarios de su objeto que comprendan las reglas de numpy y pasen el índice correcto? – unutbu

+0

Muy bien, ¿te importaría señalarnos la parte de la documentación numpy que explica este comportamiento? –

Cuestiones relacionadas