Además de las diferencias ya señaladas, hay otra diferencia extremadamente importante que acabo de descubrir por el camino difícil: a diferencia np.mean
, np.average
no permite la dtype
palabra clave, que es esencial para obtener resultados correctos en algunos casos. Tengo una matriz de precisión única muy grande a la que se accede desde un h5
archivo. Si tomo la media a lo largo de los ejes 0 y 1, obtengo resultados completamente incorrectos a menos que especifique dtype='float64'
:
>T.shape
(4096, 4096, 720)
>T.dtype
dtype('<f4')
m1 = np.average(T, axis=(0,1)) # garbage
m2 = np.mean(T, axis=(0,1)) # the same garbage
m3 = np.mean(T, axis=(0,1), dtype='float64') # correct results
Desafortunadamente, a menos que sepa qué buscar, no necesariamente puede decir que sus resultados son incorrectos. Nunca lo volveré a usar np.average
por este motivo, pero siempre lo usaré np.mean(.., dtype='float64')
en cualquier matriz grande. Si quiero un promedio ponderado, lo calcularé explícitamente usando el producto del vector de peso y la matriz de destino y luego np.sum
o bien np.mean
, según corresponda (con la precisión adecuada también).