¿Cuál es la diferencia entre 2 matrices cuyas formas son:
(442,1) y (442,) ?
Imprimir ambos produce una salida idéntica, pero cuando compruebo la igualdad == , obtengo un vector 2D como este:
array([[ True, False, False, ..., False, False, False], [False, True, False, ..., False, False, False], [False, False, True, ..., False, False, False], ..., [False, False, False, ..., True, False, False], [False, False, False, ..., False, True, False], [False, False, False, ..., False, False, True]], dtype=bool)
¿Alguien puede explicar la diferencia?
Una matriz de forma (442, 1)
es bidimensional. Tiene 442 filas y 1 columna.
Una matriz de forma (442, )
es unidimensional y consta de 442 elementos.
Tenga en cuenta que sus reproducciones deben verse diferentes también. Hay una diferencia en el número y la colocación de paréntesis:
In [7]: np.array([1,2,3]).shape Out[7]: (3,) In [8]: np.array([[1],[2],[3]]).shape Out[8]: (3, 1)
Tenga en cuenta que podría usar np.squeeze
para eliminar ejes de longitud 1:
In [13]: np.squeeze(np.array([[1],[2],[3]])).shape Out[13]: (3,)
Las reglas de transmisión NumPy permiten que los nuevos ejes se agreguen automáticamente a la izquierda cuando sea necesario. Entonces (442,)
puede transmitir a (1, 442)
. Y los ejes de longitud 1 pueden transmitir a cualquier longitud. Entonces, cuando se prueba la igualdad entre una matriz de forma (442, 1)
y una matriz de forma (442, )
, la segunda matriz se convierte en forma (1, 442)
y luego las dos matrices expanden sus ejes de longitud 1, por lo que que ambos se conviertan en matrices de formas emitidas (442, 442)
. Esta es la razón por la que cuando probó la igualdad, el resultado fue una matriz booleana de forma (442, 442)
.
In [15]: np.array([1,2,3]) == np.array([[1],[2],[3]]) Out[15]: array([[ True, False, False], [False, True, False], [False, False, True]], dtype=bool) In [16]: np.array([1,2,3]) == np.squeeze(np.array([[1],[2],[3]])) Out[16]: array([ True, True, True], dtype=bool)