Diferencia entre estas formas de matriz en numpy

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