2012-05-23 7 views
10

Функция Harmonic Mean в 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?

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

+3

«Я не математически понимаю, почему это должно быть так ...», поэтому у вас принципиально есть математический вопрос, а не вопрос программирования. –

+0

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

ответ

21

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

+0

+1 Хороший ответ. Отрицательные числа уменьшают знаменатель, что раздувает результат. – Akavall

+1

Хорошее объяснение того, почему гармоническое среднее абсолютно не имеет смысла для отрицательных чисел. –

+0

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

8

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

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

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

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

1

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

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

1

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

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

Вы можете использовать свой средний метод, как это. Допустим, у вас есть список номеров, из которых вы хотите найти среднее:

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

Он имеет и другие методы тоже как СТАНДОТКЛОН, дисперсия, мода, среднее, медиана и т.д., которые являются слишком полезны.

Смежные вопросы