¿Cómo se indexa el eje en la matriz de numpy?

Desde el tutorial de Numpy , el eje se puede indexar con números enteros, como 0 es para la columna, 1 es para la fila, pero no entiendo por qué están indexados de esta manera. ¿Y cómo calculo el índice de cada eje cuando hago frente a una matriz multidimensional?

Por definición, el número de eje de la dimensión es el índice de esa dimensión dentro de la shape la matriz. También es la posición utilizada para acceder a esa dimensión durante la indexación.

Por ejemplo, si una matriz 2D a tiene forma (5,6), entonces puede acceder a a[0,0] hasta a[4,5] . El eje 0 es, pues, la primera dimensión (las “filas”), y el eje 1 es la segunda dimensión (las “columnas”). En las dimensiones más altas, donde “fila” y “columna” realmente no tienen sentido, trate de pensar en los ejes en términos de las formas e índices involucrados.

Si hace .sum(axis=n) , por ejemplo, la dimensión n se contrae y se elimina, con cada valor en la nueva matriz igual a la sum de los valores colapsados ​​correspondientes. Por ejemplo, si b tiene forma (5,6,7,8) , y usted hace c = b.sum(axis=2) , entonces el eje 2 (dimensión con tamaño 7) se contrae, y el resultado tiene forma (5,6,8) . Además, c[x,y,z] es igual a la sum de todos los elementos b[x,y,:,z] .

Si es que alguien necesita esta descripción visual:

Numpy array axis 0 y 1

Puedes agarrar el eje de esta manera:

 >>> a = np.array([[[1,2,3],[2,2,3]],[[2,4,5],[1,3,6]],[[1,2,4],[2,3,4]],[[1,2,4],[1,2,6]]]) array([[[1, 2, 3], [2, 2, 3]], [[2, 4, 5], [1, 3, 6]], [[1, 2, 4], [2, 3, 4]], [[1, 2, 4], [1, 2, 6]]]) >>> a.shape (4,2,3) 

(4,2,3) una matriz de una forma con diferentes valores (4,2,3) para que pueda distinguir la estructura con claridad. Diferente eje significa diferente ‘capa’.

Es decir, axis = 0 indexa la primera dimensión de la forma (4,2,3) . Se refiere a las matrices en el primer [] . Hay 4 elementos en él, por lo que su forma es 4:

  array[[1, 2, 3], [2, 2, 3]], array[[2, 4, 5], [1, 3, 6]], array[[1, 2, 4], [2, 3, 4]], array[[1, 2, 4], [1, 2, 6]] 

axis = 1 índice de la segunda dimensión en forma (4,2,3) . Hay 2 elementos en cada matriz de la capa: axis = 0 , ec En la matriz de

  array[[1, 2, 3], [2, 2, 3]] 

. Los dos elementos son:

 array[1, 2, 3] array[2, 2, 3] 

Y el tercer valor de forma significa que hay 3 elementos en cada elemento de matriz de capa: axis = 2 . ec Hay 3 elementos en la array[1, 2, 3] . Eso es explícito.

Y también, puede distinguir los ejes / dimensiones a partir del número de [] al principio o al final. En este caso, el número es 3 ( [[[ )], por lo que puede elegir el axis desde el axis = 0 , el axis = 1 y el axis = 2 .

En general, eje = 0, significa todas las celdas con la primera dimensión que varía con cada valor de la segunda dimensión y la tercera dimensión y así sucesivamente

Por ejemplo, la matriz bidimensional tiene dos ejes correspondientes: el primero se ejecuta verticalmente hacia abajo a través de filas (eje 0) y el segundo se ejecuta horizontalmente a través de columnas (eje 1)

Para 3D, se vuelve complejo, entonces, use múltiples para bucles

 >>> x = np.array([[[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8]], [[ 9, 10, 11], [12, 13, 14], [15, 16, 17]], [[18, 19, 20], [21, 22, 23], [24, 25, 26]]]) >>> x.shape #(3, 3, 3) #axis = 0 >>> for j in range(0, x.shape[1]): for k in range(0, x.shape[2]): print( "element = ", (j,k), " ", [ x[i,j,k] for i in range(0, x.shape[0]) ]) ... element = (0, 0) [0, 9, 18] #sum is 27 element = (0, 1) [1, 10, 19] #sum is 30 element = (0, 2) [2, 11, 20] element = (1, 0) [3, 12, 21] element = (1, 1) [4, 13, 22] element = (1, 2) [5, 14, 23] element = (2, 0) [6, 15, 24] element = (2, 1) [7, 16, 25] element = (2, 2) [8, 17, 26] >>> x.sum(axis=0) array([[27, 30, 33], [36, 39, 42], [45, 48, 51]]) #axis = 1 for i in range(0, x.shape[0]): for k in range(0, x.shape[2]): print( "element = ", (i,k), " ", [ x[i,j,k] for j in range(0, x.shape[1]) ]) element = (0, 0) [0, 3, 6] #sum is 9 element = (0, 1) [1, 4, 7] element = (0, 2) [2, 5, 8] element = (1, 0) [9, 12, 15] element = (1, 1) [10, 13, 16] element = (1, 2) [11, 14, 17] element = (2, 0) [18, 21, 24] element = (2, 1) [19, 22, 25] element = (2, 2) [20, 23, 26] # for sum, axis is the first keyword, so we may omit it, >>> x.sum(0), x.sum(1), x.sum(2) (array([[27, 30, 33], [36, 39, 42], [45, 48, 51]]), array([[ 9, 12, 15], [36, 39, 42], [63, 66, 69]]), array([[ 3, 12, 21], [30, 39, 48], [57, 66, 75]]))