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.Se usa para remodelar una matriz.
Digamos que tenemos una matriz tridimensional de dimensiones 2 x 10 x 10:
Ahora queremos remodelar a 5 X 5 x 8:
Hará el trabajo.
Tenga en cuenta que, una vez que arregla el primer dim = 5 y el segundo dim = 5, no necesita determinar la tercera dimensión. Para ayudar a su pereza, python le da la opción de -1:
le dará una matriz de forma = (5, 5, 8).
Igualmente,
le dará una matriz de forma = (50, 4)
Puede leer más en http://anie.me/numpy-reshape-transpose-theano-dimshuffle/
fuente
De acuerdo a
the documentation
:fuente
[8]
debe a que la documentación lo dice (1-D array
). Tratarnumpy.reshape(a, [8])
. Produce el mismo resultadonumpy.reshape(a, [1,8])
para la matriz.numpy.reshape (a, newshape, order {}) consulte el siguiente enlace para obtener más información. https://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.html
para el ejemplo a continuación, mencionó que la salida explica que el vector resultante sea una sola fila. (- 1) indica el número de filas a ser 1. si el
salida:
matriz ([[1, 2, 3, 4, 5, 6, 7, 8]])
Esto puede explicarse más precisamente con otro ejemplo:
salida: (es una matriz de columnas unidimensional)
matriz ([[0],
b = np.arange (10) .reshape ((1, -1))
salida: (es un conjunto de filas de 1 dimensión)
matriz ([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
fuente
Es bastante fácil de entender. El "-1" significa "dimensión desconocida" que se puede inferir desde otra dimensión. En este caso, si configura su matriz de esta manera:
Modifique su matriz así:
Llamará a algunas operaciones sordas a la matriz a, que devolverá una matriz numpy / martrix 1-d.
Sin embargo, no creo que sea una buena idea usar un código como este. ¿Por qué no intentarlo?
Le dará el mismo resultado y es más claro para que los lectores lo entiendan: establezca b como otra forma de a. Por un lado, no sabemos cuántas columnas debería tener (¡configúrelo en -1!), Pero queremos una matriz de 1 dimensión (¡establezca el primer parámetro en 1!).
fuente
Larga historia corta : establece algunas dimensiones y deja que NumPy establezca el (los) resto (s).
fuente
Simplemente significa que no está seguro de qué número de filas o columnas puede dar y está pidiendo a numpy que sugiera el número de columnas o filas para remodelar.
numpy proporciona el último ejemplo para -1 https://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.html
verifique el código a continuación y su salida para comprender mejor acerca de (-1):
CÓDIGO:-
SALIDA: -
fuente
fuente
El resultado final de la conversión es que el número de elementos en la matriz final es el mismo que el de la matriz inicial o el marco de datos.
-1 corresponde al recuento desconocido de la fila o columna. podemos pensar en ello como
x
(desconocido).x
se obtiene dividiendo el número de elementos en la matriz original por el otro valor del par ordenado con -1.Ejemplos
12 elementos con remodelación (-1,1) corresponden a una matriz con
x
= 12/1 = 12 filas y 1 columna.12 elementos con remodelación (1, -1) corresponden a una matriz con 1 fila y
x
= 12/1 = 12 columnas.fuente