2012-05-23 170 views
10

La función Mean Armónica en Python (scipy.stats.hmean) requiere que la entrada sea de números positivos.media armónica en python

Por ejemplo:

from scipy import stats 
print stats.hmean([ -50.2 , 100.5 ]) 

resultados en:

ValueError: Harmonic mean only defined if all elements greater than zero 

que matemáticamente no ven por qué esto debería ser el caso, excepto por el raro caso en que terminaría la división por cero . En lugar de buscar una división por cero, hmean() arroja un error al ingresar cualquier número positivo, ya sea que se encuentre o no una media armónica.

¿Me falta algo aquí en las matemáticas? ¿O es esto realmente una limitación en SciPy?

¿Cómo harías para encontrar la media armónica de un conjunto de números que podrían ser positivos o negativos en python?

+3

"No entiendo matemáticamente por qué este debería ser el caso ..." por lo que fundamentalmente tiene una pregunta matemática, no una pregunta de programación. –

+0

.. y una pregunta matemática que está claramente respondida, ya que la media armónica tiene sentido solo para números positivos. –

Respuesta

21

La media armónica sólo se define para conjuntos de números reales positivos. Si intentas calcularlo para conjuntos con negativos obtienes todo tipo de resultados extraños e inútiles incluso si no tocas div por 0. Por ejemplo, aplicar la fórmula al conjunto (3, -3, 4) da una media de 12!

+0

+1 Buena respuesta. Los números negativos disminuyen el denominador, lo que infla el resultado. – Akavall

+1

Buena explicación de por qué la media armónica no tiene absolutamente ningún sentido para los números negativos. –

+0

factorial (12) ??? ;-) – dpb

1

la definición matemática de la propia media armónica no prohíbe las aplicaciones a números negativos (aunque puede que no desee calcular la media armónica de +1 y -1), sin embargo, está diseñada para calcular la media para cantidades como proporciones de modo que daría el mismo peso a cada punto de datos, mientras que en los medios aritméticos o similares, la relación de los puntos de datos extremos adquiriría mucho más peso y, por lo tanto, no se desea.

Así que puede intentar codificar la definición usted mismo como @HYRY sugirió, o puede haber aplicado la media armónica en el contexto incorrecto.

1

Hay una biblioteca estadísticas si está utilizando Python> = 3.6:

https://docs.python.org/3/library/statistics.html

Usted puede utilizar su método de la media de esta manera. Digamos que usted tiene una lista de los números de los que desea encontrar media:

list = [11, 13, 12, 15, 17] 
import statistics as s 
s.harmonic_mean(list) 

Tiene también otros métodos como DESVEST, varianza, modo, media, mediana, etc, que son demasiado útil.