Numpy: comprensión de Axis

  • El eje es el nivel de la matriz
  • Establezca eje = i, entonces Numpy opera a lo largo de la dirección del i-ésimo cambio de subíndice
  • Aplicación de eje

 

El eje es el nivel de la matriz

Para entender el eje, primero debemos averiguar los dos conceptos de "la dimensión de matrices en Numpy" y "la dimensión de matrices en álgebra lineal" y la relación entre ellos. En el concepto de matemáticas o física, las dimensiones se consideran el número mínimo de coordenadas necesarias para representar un punto en el espacio, pero en Numpy, las dimensiones se refieren a las dimensiones de la matriz. Por ejemplo, el siguiente ejemplo:

>>> import numpy as np
>>> a = np.array([[1,2,3],[2,3,4],[3,4,9]])
>>> a
array([[1, 2, 3],
       [2, 3, 4],
       [3, 4, 9]])

La dimensión de esta matriz es solo 2, es decir, hay dos ejes, eje = 0 y eje = 1. Como se muestra en la figura siguiente, la dimensión 0 (eje = 0) de la matriz bidimensional tiene tres elementos (imagen de la izquierda), es decir, la longitud del eje = 0 eje es 3; la primera dimensión (eje = 1 ) también tiene tres elementos (Derecha), es decir, la longitud del eje = 1 es 3. Es precisamente porque la longitud del eje = 0 y el eje = 1 son 3, y la matriz tiene 3 números horizontal y verticalmente, por lo que la matriz es tridimensional en álgebra lineal (el rango de rango es 3).

Por lo tanto, el eje es el nivel de la matriz.

Cuando axis = 0, hay 3 elementos en el eje (el tamaño de la matriz es 3)

a[0]a[1]a[2]

Cuando axis = 1, hay 3 elementos en el eje (el tamaño de la matriz es 3)

a[0][0]a[0][1]a[0][2]

(O a[1][0], a[1][1], a[1][2])

(O a[2][0], a[2][1], a[2][2])

 

Otro ejemplo es la siguiente matriz cuya forma es (3,2,4):

>>> b = np.array([[[1,2,3,4],[1,3,4,5]],[[2,4,7,5],[8,4,3,5]],[[2,5,7,3],[1,5,3,7]]])
>>> b
array([[[1, 2, 3, 4],
        [1, 3, 4, 5]],

       [[2, 4, 7, 5],
        [8, 4, 3, 5]],

       [[2, 5, 7, 3],
        [1, 5, 3, 7]]])
>>> b.shape
(3, 2, 4)

Esta forma (indicada por tupla) puede entenderse como el tamaño de cada eje, que es la longitud ocupada. Para una mejor comprensión, podemos imaginar temporalmente múltiples ejes como múltiples capas. eje = 0 significa la primera capa (el cuadro negro en la figura siguiente), el tamaño de la matriz de esta capa es 3, y el elemento en el eje correspondiente longitud = 3; eje = 1 significa la segunda capa (el cuadro rojo en la figura siguiente), la matriz de esta capa El tamaño de es 2, que corresponde a la longitud del elemento = 2 en el eje; eje = 2 significa la tercera capa (el cuadro azul en la figura siguiente) y la longitud del elemento = 4 en el eje correspondiente.

 

 

Establezca eje = i, entonces Numpy opera a lo largo de la dirección del i-ésimo cambio de subíndice

1. Ejemplo de matriz bidimensional:

Por ejemplo np.sum(a, axis=1), combinado con la siguiente matriz,  a[0][0]= 1, a[0][1]= 2, a[0][2]= 3, la dirección en la que cambiará el subíndice es la primera dimensión de la matriz.

Vamos a la dirección donde cambiará el subíndice y sumamos los elementos para obtener el resultado final:

[
  [6],
  [9],
  [16]
]

 

2. Ejemplo de matriz tridimensional:

Para dar otro ejemplo, por ejemplo, la siguiente np.shape(a)=(3,2,4)matriz tridimensional, la longitud de la dimensión 0 de la matriz es 3 (caja negra) y la longitud de la primera dimensión es 2 (caja roja), y la longitud de la la primera dimensión es 2 (recuadro rojo) La longitud de la dimensión 2 es 4 (recuadro azul).

Si queremos calcular np.sum(a, axis=1), en la primera caja negra,

La dirección de cambio del subíndice es la siguiente:

Entonces, tenemos que sumar los dos recuadros rojos

 

Al procesar la segunda y tercera caja negra de acuerdo con la misma lógica, se puede obtener el resultado final:

Por lo tanto, sigue siendo la oración que resumimos anteriormente, establecer eje = i, entonces Numpy operará a lo largo de la dirección del i-ésimo cambio de subíndice.

 

3. Ejemplo de matriz de cuatro dimensiones:

Por ejemplo, la siguiente matriz de 4 dimensiones enorme y compleja,

>>> data = np.random.randint(0, 5, [4,3,2,3])
>>> data
array([[[[4, 1, 0],
         [4, 3, 0]],
        [[1, 2, 4],
         [2, 2, 3]],
        [[4, 3, 3],
         [4, 2, 3]]],

       [[[4, 0, 1],
         [1, 1, 1]],
        [[0, 1, 0],
         [0, 4, 1]],
        [[1, 3, 0],
         [0, 3, 0]]],

       [[[3, 3, 4],
         [0, 1, 0]],
        [[1, 2, 3],
         [4, 0, 4]],
        [[1, 4, 1],
         [1, 3, 2]]],

       [[[0, 1, 1],
         [2, 4, 3]],
        [[4, 1, 4],
         [1, 4, 1]],
        [[0, 1, 0],
         [2, 4, 3]]]])

Cuando el eje = 0, muchas sumas a lo largo de la dimensión 0, es decir, el valor del primer elemento = a0000 + a1000 + a2000 + a3000 = 11, y el segundo elemento = a0001 + a1001 + a2001 + a3001 = 5 De la misma manera , el resultado final es el siguiente:

>>> data.sum(axis=0)
array([[[11,  5,  6],
        [ 7,  9,  4]],

       [[ 6,  6, 11],
        [ 7, 10,  9]],

       [[ 6, 11,  4],
        [ 7, 12,  8]]])

Cuando el eje = 3, numerosas sumas a lo largo de la tercera dimensión, es decir, el valor del primer elemento = a0000 + a0001 + a0002 = 5, y el segundo elemento = a0010 + a0011 + a0012 = 7, lo mismo ocurre con El resultado final es como sigue:

>>> data.sum(axis=3)
array([[[ 5,  7],
        [ 7,  7],
        [10,  9]],

       [[ 5,  3],
        [ 1,  5],
        [ 4,  3]],

       [[10,  1],
        [ 6,  8],
        [ 6,  6]],

       [[ 2,  9],
        [ 9,  6],
        [ 1,  9]]])

 

Aplicación de eje

Por ejemplo, ahora hemos recopilado los datos (puntuación total de 10) que cuatro compañeros de clase calificaron la manzana, el durián y la sandía por su amor por las tres frutas. Cada compañero de clase tiene tres características:

>>> item = np.array([[1,4,8],[2,3,5],[2,5,1],[1,10,7]])
>>> item
array([[1, 4, 8],
       [2, 3, 5],
       [2, 5, 1],
       [1, 10, 7]])

Cada fila contiene tres características de la misma persona. Si queremos ver a qué compañero le gusta comer fruta, podemos usar:

>>> item.sum(axis = 1)
array([13, 10,  8, 18])

Probablemente puedas ver que al compañero de clase 4 le gusta más comer fruta.

Si queremos ver qué fruta es la más popular, podemos utilizar:

>>> item.sum(axis = 0)
array([ 6, 22, 21])

Se puede ver que el durian es básicamente el más popular.

Supongo que te gusta

Origin blog.csdn.net/weixin_40244676/article/details/102977029
Recomendado
Clasificación