El criterio a cumplir para proporcionar la nueva forma es que "la nueva forma debe ser compatible con la forma original"
numpy nos permite dar uno de los nuevos parámetros de forma como -1 (por ejemplo: (2, -1) o (-1,3) pero no (-1, -1)). Simplemente significa que es una dimensión desconocida y queremos que Numpy se dé cuenta. Y numpy calculará esto mirando la 'longitud de la matriz y las dimensiones restantes' y asegurándose de que cumpla con los criterios mencionados anteriormente
Ahora mira el ejemplo.
z = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]])
z.shape
(3, 4)
Ahora tratando de remodelar con (-1). El resultado de la nueva forma es (12,) y es compatible con la forma original (3,4)
z.reshape(-1)
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
Ahora tratando de remodelar con (-1, 1). Hemos proporcionado la columna como 1 pero las filas como desconocidas. Entonces obtenemos resultados con una nueva forma como (12, 1). De nuevo compatible con la forma original (3,4)
z.reshape(-1,1)
array([[ 1],
[ 2],
[ 3],
[ 4],
[ 5],
[ 6],
[ 7],
[ 8],
[ 9],
[10],
[11],
[12]])
Lo anterior es consistente con el numpy
mensaje de aviso / error, para usar reshape(-1,1)
para una sola característica; es decir, una sola columna
Cambie la forma de sus datos usando array.reshape(-1, 1)
si sus datos tienen una sola característica
Nueva forma como (-1, 2). fila desconocida, columna 2. obtenemos resultado nueva forma como (6, 2)
z.reshape(-1, 2)
array([[ 1, 2],
[ 3, 4],
[ 5, 6],
[ 7, 8],
[ 9, 10],
[11, 12]])
Ahora tratando de mantener la columna como desconocida. Nueva forma como (1, -1). es decir, fila es 1, columna desconocida. obtenemos resultado nueva forma como (1, 12)
z.reshape(1,-1)
array([[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]])
Lo anterior es consistente con el numpy
mensaje de aviso / error, para usar reshape(1,-1)
para una sola muestra; es decir, una sola fila
Cambie la forma de sus datos usando array.reshape(1, -1)
si contiene una sola muestra
Nueva forma (2, -1). Fila 2, columna desconocida. obtenemos resultado nueva forma como (2,6)
z.reshape(2, -1)
array([[ 1, 2, 3, 4, 5, 6],
[ 7, 8, 9, 10, 11, 12]])
Nueva forma como (3, -1). Fila 3, columna desconocida. obtenemos resultado nueva forma como (3,4)
z.reshape(3, -1)
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
Y finalmente, si intentamos proporcionar ambas dimensiones como desconocidas, es decir, una nueva forma como (-1, -1). Arrojará un error
z.reshape(-1, -1)
ValueError: can only specify one unknown dimension
reshape
para mantener el mismo número de elementos.