Numpy eliminar una dimensión de la matriz np

Tengo algunas imágenes con las que quiero trabajar, el problema es que hay dos tipos de imágenes, ambas de 106 x 106 píxeles, algunas en color y otras en blanco y negro.

uno con solo dos (2) dimensiones:

(106,106)

y uno con tres (3)

(106,106,3)

¿Hay alguna manera de poder despojar esta última dimensión?

Intenté np.delete, pero no pareció funcionar.

np.shape(np.delete(Xtrain[0], [2] , 2)) Out[67]: (106, 106, 2) 

Podría usar la indexación elegante de numpy (una extensión de la notación de división incorporada de Python):

 x = np.zeros( (106, 106, 3) ) result = x[:, :, 0] print(result.shape) 

huellas dactilares

 (106, 106) 

Una forma de (106, 106, 3) significa que tiene 3 conjuntos de cosas que tienen forma (106, 106) . Así que para “despojar” la última dimensión, solo tienes que elegir una de estas (eso es lo que hace la elegante indexación).

Puedes mantener cualquier rebanada que quieras. Elegí arbitrariamente mantener el 0, ya que no especificaste lo que querías. Entonces, result = x[:, :, 1] y result = x[:, :, 2] también darán la forma deseada: todo depende de la porción que necesites mantener.

Simplemente tome el valor medio sobre la dimensión de los colores ( axis=2 ):

 Xtrain_monochrome = Xtrain.mean(axis=2) 

Cuando la forma de su matriz es (106, 106, 3) , puede visualizarla como una tabla con 106 filas y 106 columnas llenas de puntos de datos donde cada punto es una array of 3 numbers que podemos representar como [x, y ,z] . Por lo tanto, si desea obtener las dimensiones (106, 106) , debe hacer que los puntos de datos en su tabla no sean matrices, sino números únicos. Puede lograr esto extrayendo el componente x, el componente y o el componente z de cada punto de datos o aplicando una función que de alguna manera agregue los tres componentes como la media, la sum, el máximo, etc. Puede extraer cualquier componente como @matt Messersmith sugirió más arriba.