2012-05-23 12 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の制限ですか?

パイソンで正または負である数値の調和平均を求める方法はありますか?

+3

"これがなぜこのようになるのか、数学的にはわかりません..."ということは、基本的にプログラミングに関する質問ではなく、数学的な質問です。 –

+0

..と明らかに答えられている数学の問題は、調波の平均が正の数だけ意味をなさない。 –

答えて

21

調和平均はのみ定義されます正の実数の組について。 divを0に設定しなくても、ネガティブなセットを使って計算すると、奇妙で​​無駄な結果が得られます。たとえば、式をセット(3、-3、4)に適用すると、 12の!

+0

+1良い答え。負の数は分母を減らし、結果を膨らませます。 – Akavall

+1

なぜ高調波の平均が負の数に対して絶対に意味を持たないのかについての良い説明。 –

+0

階乗(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) 

それはあまりにも便利ですあまりにもSTDEV、分散、モード、平均値、中央値などのような他の方法があります。