Me doy cuenta de que
In [30]: np.mean([1, 2, 3])
Out[30]: 2.0
In [31]: np.average([1, 2, 3])
Out[31]: 2.0
Sin embargo, debería haber algunas diferencias, ya que después de todo son dos funciones diferentes.
Cuáles son las diferencias entre ellos?
Respuestas:
np.average toma un parámetro de peso opcional. Si no se suministra son equivalentes. Echa un vistazo al código fuente: media , media
np.mean:
np.average:
fuente
np.average
yaweights
que ya es opcional. Parece innecesario y solo sirve para confundir a los usuarios.np.mean
siempre calcula una media aritmética y tiene algunas opciones adicionales para entrada y salida (por ejemplo, qué tipos de datos usar, dónde colocar el resultado).np.average
puede calcular un promedio ponderado siweights
se proporciona el parámetro.fuente
En alguna versión de numpy hay otra diferencia importante que debes tener en cuenta:
average
No tome en cuenta las máscaras, por lo tanto, calcule el promedio de todo el conjunto de datos.mean
toma en cuenta las máscaras, así que calcule la media solo sobre los valores sin máscara.fuente
np.ma.average
funciona. Además, hay un informe de error .En su invocación, las dos funciones son las mismas.
average
Sin embargo, puede calcular un promedio ponderado.Doc enlaces:
mean
yaverage
fuente
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 ladtype
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 unh5
archivo. Si tomo la media a lo largo de los ejes 0 y 1, obtengo resultados completamente incorrectos a menos que especifiquedtype='float64'
: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 luegonp.sum
o biennp.mean
, según corresponda (con la precisión adecuada también).fuente