¿Por qué el comportamiento de los arrays numpy con paréntesis y comas difiere?

Tiendo a indexar matrices numpy (matrices) entre corchetes, pero he notado que cuando quiero cortar una matriz (matrix) debo usar la notación de coma. ¿Por qué es esto? Por ejemplo,

>>> x = numpy.array([[1, 2], [3, 4], [5, 6]]) >>> x array([[1, 2], [3, 4], [5, 6]]) >>> x[1][1] 4 # expected behavior >>> x[1,1] 4 # expected behavior >>> x[:][1] array([3, 4]) # huh? >>> x[:,1] array([2, 4, 6]) # expected behavior 

Esta:

 x[:, 1] 

significa “tomar todos los índices de x largo del primer eje, pero solo el índice 1 a lo largo del segundo”.

Esta:

 x[:][1] 

significa “tomar todos los índices de x largo del primer eje (entonces todos de x ), luego tomar el índice 1 a lo largo del primer eje del resultado”. Estás aplicando el 1 al eje equivocado.

x[1][2] y x[1, 2] solo son equivalentes porque al indexar una matriz con un entero, se desplazan todos los ejes restantes hacia el frente de la forma, por lo que el primer eje de x[1] es el segundo eje de x . Esto no generaliza en absoluto; casi siempre debe usar comas en lugar de varios pasos de indexación.

Cuando se divide una dimensión múltiple de la matriz, si se proporcionan menos índices que el número de ejes, los índices que faltan se consideran segmentos completos. Por lo tanto, cuando estás haciendo esencialmente cuando llamas a x[:][1] es x[:,:][1,:] Por lo tanto, x[:,:] solo devolverá x el mismo.