python - functions - pip install numpy
¿Qué significa-1 en la remodelación numpy? (5)
Una matriz numpy se puede transformar en un vector usando la función remodelar con el parámetro -1. Pero no sé qué significa -1 aquí.
Por ejemplo:
a = numpy.matrix([[1, 2, 3, 4], [5, 6, 7, 8]])
b = numpy.reshape(a, -1)
El resultado de b
es: matrix([[1, 2, 3, 4, 5, 6, 7, 8]])
¿Alguien sabe lo que significa -1 aquí? Y parece que Python asigna -1 varios significados, tales como: array[-1]
significa el último elemento. ¿Puedes dar una explicación?
El criterio a satisfacer 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 se trata de una dimensión desconocida y queremos que Numpy lo descubra. Y numpy lo resolverá mirando la ''longitud de la matriz y las dimensiones restantes'' y asegurándose de que cumpla con los criterios mencionados anteriormente
Ahora ve 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). La nueva forma del resultado 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. Así obtenemos una nueva forma de resultado como (12, 1). Otra vez compatible con la forma original (3,4)
z.reshape(-1,1)
array([[ 1],
[ 2],
[ 3],
[ 4],
[ 5],
[ 6],
[ 7],
[ 8],
[ 9],
[10],
[11],
[12]])
Nueva forma como (-1, 2). fila desconocida, columna 2. obtenemos una nueva forma de resultado 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, la fila es 1, columna desconocida. obtenemos el resultado nueva forma como (1, 12)
z.reshape(1,-1)
array([[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]])
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, por último, si intentamos proporcionar una dimensión como desconocida, es decir, una nueva forma como (-1, -1). Lanzará un error
z.reshape(-1, -1)
ValueError: can only specify one unknown dimension
Es bastante fácil de entender. El "-1" significa "dimensión desconocida" que se puede inferir de otra dimensión. En este caso, si configura su matriz de esta manera:
a = numpy.matrix([[1, 2, 3, 4], [5, 6, 7, 8]])
Modifica tu matriz de esta manera:
b = numpy.reshape(a, -1)
Llamará algunas operaciones sordas a la matriz a, que devolverá un array / martrix numpy 1-d.
Sin embargo, no creo que sea una buena idea usar un código como este. ¿Por qué no intentarlo?
b = a.reshape(1,-1)
Le dará el mismo resultado y es más claro para que lo entiendan los lectores: establezca b como otra forma de a. Para a, 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!).
Se utiliza para remodelar una matriz.
Digamos que tenemos una matriz tridimensional de dimensiones 2 x 10 x 10:
r = numpy.random.rand(2, 10, 10)
Ahora queremos remodelar a 5 X 5 x 8:
numpy.reshape(r, shape=(5, 5, 8))
hará el trabajo
Tenga en cuenta que, una vez que arregle el primer dim = 5 y el segundo dim = 5, no necesita determinar la tercera dimensión. Para ayudar a su pereza, python da la opción de -1:
numpy.reshape(r, shape=(5, 5, -1))
le dará una matriz de forma = (5, 5, 8).
Igualmente,
numpy.reshape(r, shape=(50, -1))
te dará una matriz de forma = (50, 4)
Puedes leer más en http://anie.me/numpy-reshape-transpose-theano-dimshuffle/
Según the documentation
:
newshape: int o tuple of ints
La nueva forma debe ser compatible con la forma original. Si es un entero, entonces el resultado será una matriz 1-D de esa longitud. Una dimensión de forma puede ser -1. En este caso, el valor se infiere a partir de la longitud de la matriz y las dimensiones restantes.
numpy.reshape (a, newshape, order {}) revise 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 es una sola fila. (- 1) indica el número de filas a ser 1. si
a = numpy.matrix([[1, 2, 3, 4], [5, 6, 7, 8]])
b = numpy.reshape(a, -1)
salida:
matriz ([[1, 2, 3, 4, 5, 6, 7, 8]])
Esto puede explicarse más precisamente con otro ejemplo:
b = np.arange(10).reshape((-1,1))
salida: (es una matriz columnar unidimensional)
array ([[0],
[1],
[2],
[3],
[4],
[5],
[6],
[7],
[8],
[9]])
b = np.arange (10) .reshape ((1, -1))
salida: (es una matriz de fila 1 dimensional)
array ([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])