harmonic mean in python

Zach picture Zach · May 23, 2012 · Viewed 17.9k times · Source

The Harmonic Mean function in Python (scipy.stats.hmean) requires that the input be positive numbers.

For example:

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

results in:

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

I don't mathematically see why this should be the case, except for the rare instance where you would end up dividing by zero. Instead of checking for a divide by zero, hmean() then throws an error upon inputing any positive number, whether a harmonic mean can be found or not.

Am I missing something here in the maths? Or is this really a limitation in SciPy?

How would you go about finding the harmonic mean of a set of numbers which might be positive or negative in python?

Answer

verdesmarald picture verdesmarald · May 23, 2012

The harmonic mean is only defined for sets of positive real numbers. If you try and compute it for sets with negatives you get all kinds of strange and useless results even if you don't hit div by 0. For example, applying the formula to the set (3, -3, 4) gives a mean of 12!