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.averageno permite la dtypepalabra 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 h5archivo. 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.averagepor 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.sumo bien np.mean, según corresponda (con la precisión adecuada también).