harmonic mean in python

math, mean, python, scipy, statistics

Solution

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!

Problem

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?

Original source