functions python numpy

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]])