Tengo un ndarray numpy con forma (2,3,3), por ejemplo:

array([[[ 1,  2,  3],
    [ 4,  5,  6],
    [12, 34, 90]],

   [[ 4,  5,  6],
    [ 2,  5,  6],
    [ 7,  3,  4]]])

Me estoy perdiendo en np.sum (arriba de ndarray, axis = 1), por qué esa respuesta es:

array([[17, 41, 99],
   [13, 13, 16]])

Gracias

6
vincent 10 may. 2016 a las 17:55

4 respuestas

La mejor respuesta

Los ejes se definen para matrices con más de una dimensión. Una matriz bidimensional tiene dos ejes correspondientes: el primero que corre verticalmente hacia abajo a través de las filas (eje 0), y el segundo que corre horizontalmente a través de las columnas (eje 1).

Deje A ser la matriz, luego, en su ejemplo, cuando el eje es 1, se agregan [i,:, k]. Del mismo modo, para el eje 0, se agregan [:, j, k] y cuando el eje es 2, se agregan [i, j ,:].

 A = np.array([[[ 1,  2,  3],[ 4,  5,  6],
    [12, 34, 90]],
    [[ 4,  5,  6],[ 2,  5,  6],
    [ 7,  3,  4]]])


np.sum(A,axis = 0)
    array([[ 5,  7,  9],
           [ 6, 10, 12],
           [19, 37, 94]])
np.sum(A,axis = 1)
    array([[17, 41, 99],
                   [13, 13, 16]])
np.sum(A,axis = 2)
    array([[  6,  15, 136],
           [ 15,  13,  14]])
5
modestfool 11 may. 2016 a las 05:08

Llamemos a la matriz de entrada A y a la matriz de salida B = np.sum(A, axis=1). Tiene elementos B[i, j] que se calculan como

B[i, j] = np.sum(A[i, :, j])

P.ej. el primer elemento B[0,0] = 17 es la suma de los elementos en

A[0, :, 0] = array([ 1,  4, 12])
0
Hannes Ovrén 10 may. 2016 a las 15:19

La matriz tiene forma (2,3,3); el eje 1 es el medio, de tamaño 3. Elimínelo con sum y quedará con (2,3), la forma de su resultado.

Interpretar 3d es un poco complicado. Tiendo a pensar que esta matriz tiene 2 planos, cada plano tiene 3 filas y 3 columnas. La suma en el eje 1 está sobre las filas de cada plano.

1 + 4 + 12 == 17

En efecto, está reduciendo cada 2d plano a una 1ra fila.

0
hpaulj 10 may. 2016 a las 17:05

Np.sum () está agregando los valores verticalmente, se agrega el primer elemento de cada sublista en la primera lista: 1 + 4 + 12 = 17, luego el segundo 2 + 5 + 34 = 41 etc.

0
SFortescue 10 may. 2016 a las 15:21