tutorial - transpuesta de una matriz en python numpy
Calcular la media a través de la dimensión en una matriz 2D (3)
Tengo una matriz como esta:
a = [[40, 10], [50, 11]]
Necesito calcular la media para cada dimensión por separado, el resultado debería ser el siguiente:
[45,10.5]
45
siendo la media de a[*][0]
y 10.5
la media de ''a [*] [1].
¿Cuál es la forma más elegante de resolver esto sin pasar por un ciclo?
Aquí hay una solución no numpy:
>>> a = [[40, 10], [50, 11]]
>>> [float(sum(l))/len(l) for l in zip(*a)]
[45.0, 10.5]
Si haces esto mucho, NumPy es el camino a seguir.
Si por alguna razón no puedes usar NumPy:
>>> map(lambda x:sum(x)/float(len(x)), zip(*a))
[45.0, 10.5]
a.mean()
toma un argumento de axis
:
In [1]: import numpy as np
In [2]: a = np.array([[40, 10], [50, 11]])
In [3]: a.mean(axis=1) # to take the mean of each row
Out[3]: array([ 25. , 30.5])
In [4]: a.mean(axis=0) # to take the mean of each col
Out[4]: array([ 45. , 10.5])
O, como una función independiente:
In [5]: np.mean(a, axis=1)
Out[5]: array([ 25. , 30.5])
La razón por la que su división no funciona es porque esta es la sintaxis para cortar:
In [6]: a[:,0].mean() # first column
Out[6]: 45.0
In [7]: a[:,1].mean() # second column
Out[7]: 10.5