гармоническое среднее в python

функция гармонического среднего в Python (scipy.stats.hmean) требует, чтобы входные данные были положительными числами.

например:

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

результаты:

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

Я математически не понимаю, почему это должно быть так, за исключением редкого случая, когда вы в конечном итоге делите на ноль. Вместо того, чтобы проверять деление на ноль,hmean() затем выдает ошибку при вводе любого положительного числа, можно ли найти гармоническое среднее или не.

Я что-то пропустил здесь в математике? Или это действительно ограничение в SciPy?

как бы вы могли найти гармоническое среднее набора чисел, которые могут быть положительными или отрицательными в python?

4 ответов


гармоническое среднее определяется только для множеств положительных вещественных чисел. Если вы попытаетесь вычислить его для множеств с негативами, вы получите всевозможные странные и бесполезные результаты, даже если вы не нажмете div на 0. Например, применение формулы к множеству (3, -3, 4) дает среднее значение 12!


вы можете просто использовать среднее гармоническое определить уравнение:

len(a) / np.sum(1.0/a) 

но Википедия говорит, что гармоническое среднее определяется для положительных вещественных чисел:

http://en.wikipedia.org/wiki/Harmonic_mean


математическое определение гармонического среднего само по себе не запрещает применения к отрицательным числам (хотя вы, возможно, не захотите вычислять гармоническое среднее +1 и -1), однако оно предназначено для вычисления среднего значения для таких величин, как отношения, чтобы оно давало равный вес каждой точке данных, в то время как в арифметических средствах или таком отношении экстремальных точек данных приобретало бы большой вес и, таким образом, нежелательно.

таким образом, вы либо можете попробовать hardcode определение самостоятельно, как предложил @HYRY, или, возможно, применил гармоническое среднее в неправильном контексте.


существует библиотека статистики, если вы используете Python >= 3.6:

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

вы можете использовать его значит метод такой. Предположим, у вас есть список чисел, из которых вы хотите найти mean:

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

Он имеет другие методы, такие как stdev, дисперсия, режим, среднее, медиана и т. д., которые слишком полезны.