2012-05-23 71 views
10

Python中的諧波均值函數(scipy.stats.hmean)要求輸入爲正數。python中的諧波均值

例如:

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有正面或負面影響的數字的調和平均值?

+3

「我不會在數學上明白爲什麼這應該是這種情況......」所以你從根本上有一個數學問題,而不是一個編程問題。 –

+0

..和一個數學問題,這是清楚地回答,因爲調和平均值只對正數有意義。 –

回答

21

調和平均值只被定義爲正實數的集合。如果你嘗試計算帶負值的集合,即使你沒有將div打到0,你也會得到各種奇怪而無用的結果。例如,將公式應用到集合(3,-3,4)中給出了一個均值12!

+0

+1好答案。負數會減小分母,從而擴大結果。 – Akavall

+1

爲什麼調和平均值對負數絕對沒有意義。 – 2012-05-23 03:36:06

+0

階乘(12)??? ;-) – dpb

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) 

它有其他的方法太像標準偏差,方差,模式,平均值,中位數等,這是太有用了。