2012-05-23 9 views
10

La funzione di media armonica in Python (scipy.stats.hmean) richiede che l'input sia numeri positivi.media armonica in python

Ad esempio:

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

risultati in:

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

io non matematicamente capire perché questo dovrebbe essere il caso, ad eccezione del caso raro in cui si finirebbe per dividere per zero . Invece di verificare una divisione per zero, hmean() genera un errore dopo aver inserito un numero positivo, indipendentemente dal fatto che sia possibile trovare una media armonica.

Mi manca qualcosa qui in matematica? O questa è davvero una limitazione in SciPy?

Come andresti a trovare la media armonica di un insieme di numeri che potrebbe essere positivo o negativo in python?

+3

"Non capisco matematicamente perché dovrebbe essere così ..." quindi fondamentalmente hai una domanda di matematica, non una domanda di programmazione. –

+0

.. e una domanda di matematica a cui si risponde chiaramente, in quanto la media armonica ha senso solo per i numeri positivi. –

risposta

21

La media armonica è definita solo per insiemi di numeri reali positivi. Se provi a calcolarlo per set con negativi ottieni tutti i tipi di risultati strani e inutili anche se non premi il div per 0. Ad esempio, applicando la formula al set (3, -3, 4) si ottiene una media di 12!

+0

+1 Buona risposta. I numeri negativi diminuiscono il denominatore, che gonfia il risultato. – Akavall

+1

Una buona spiegazione del perché la media armonica non ha assolutamente senso per i numeri negativi. –

+0

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

1

la definizione matematica di stesso significato armonico non proibisce le applicazioni ai numeri negativi (sebbene non si voglia calcolare la media armonica di +1 e -1), tuttavia, è progettato per calcolare la media per quantità come i rapporti in modo tale da dare uguale peso ad ogni punto di dati, mentre in aritmetica o in modo tale che il rapporto di punti di dati estremi acquisisca molto peso elevato e sia quindi indesiderato.

Così si potrebbe provare a codificare la definizione da soli come suggerito da @HYRY o potrebbe aver applicato la media armonica nel contesto sbagliato.

1

C'è una biblioteca statistiche se si sta utilizzando Python> = 3.6:

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

Si può usare il suo metodo di media come questo. Diciamo che si dispone di un elenco di numeri di cui si desidera trovare media:

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

Ha anche altri metodi come stdev, varianza, modalità, media, mediana, ecc che sono troppo utile.