Estoy enfrentando algunos problemas para obtener una matriz en la forma correcta para usarla como entrada en una red neuronal convolucional:
Mi matriz tiene la forma (100,64,64) , pero necesitaría que fuera (100,64,64,1) . Me doy cuenta de que se ve un poco extraño, pero básicamente quiero empaquetar cada entrada en una matriz separada.
Un ejemplo simplificado, con una matriz 2D, donde el análogo sería de (3,3) a (3,3,1) :
[[0,1,0], [[[0],[1],[0]], [1,1,1], [[1],[1],[1]], [0,0,1]] [[0],[0],[1]]]¿Hay una manera conveniente de hacer esto usando numpy?
Intenté usar la función numpy.reshape : con la que sé, cómo "agregar" otra matriz que envuelve la original.
import numpy as np data = data.reshape((1,)+data.shape) Esto da la salida para data.shape : (1,100,64,64) . ¿Hay alguna manera de agregar una dimensión en el "extremo interno"?
Si pruebo data.reshape(data.shape+(,1)) , obtengo un error de sintaxis no válida.
Como señalan los documentos , cuando las formas son compatibles como las suyas, también puede cambiar directamente la forma de la matriz:
a = np.array([ [0, 1, 0], [1, 1, 1], [0, 0, 1] ]) a.shape += (1,) a # array([[[0], [1], [0]], # [[1], [1], [1]], # [[0], [0], [1]]])Puedes remodelar usando:
a[:,:,None]O, programáticamente (funciona para cualquier número de dimensiones):
a.reshape((*a.shape,1))ejemplo
a = np.array([[0,1,0], [1,1,1], [0,0,1]]) # array([[0, 1, 0], # [1, 1, 1], # [0, 0, 1]]) a[:,:,None] # or a.reshape((*a.shape,1)) # array([[[0], [1], [0]], # [[1], [1], [1]], # [[0], [0], [1]]])Puede pasar puntos suspensivos más None al indexador de matrices:
>>> a array([[0, 1, 0], [1, 1, 1], [0, 0, 1]]) >>> a[..., None] array([[[0], [1], [0]], [[1], [1], [1]], [[0], [0], [1]]])(Crédito a @hpaulj )