python中的调和平均值

Zac*_*ach 13 python math statistics mean scipy

Python(scipy.stats.hmean)中的Harmonic Mean函数要求输入为正数.

例如:

from scipy import stats
print stats.hmean([ -50.2 , 100.5 ])
Run Code Online (Sandbox Code Playgroud)

结果是:

ValueError: Harmonic mean only defined if all elements greater than zero
Run Code Online (Sandbox Code Playgroud)

我没有在数学上看到为什么会出现这种情况,除了罕见的情况,你最终将除以零.不是检查除以零,而是hmean()在输入任何正数时抛出错误,无论是否可以找到调和平均值.

我在数学中遗漏了什么吗?或者这真的是一个限制SciPy吗?

你如何找到一组数字的调和平均值,这些数字在python中可能是正数还是负数?

ver*_*ald 29

调和平均值仅针对正实数组定义.如果你尝试计算带有负数的集合,即使你没有将div命中为0,你也会得到各种奇怪和无用的结果.例如,将公式应用于集合(3,-3,4)给出了一个平均值12!

  • +1好答案。负数会减少分母,从而使结果膨胀。 (3认同)
  • 很好地解释为什么调和平均值对负数完全没有意义. (3认同)

HYR*_*YRY 12

你可以使用Harmonic Mean定义方程:

len(a) / np.sum(1.0/a) 
Run Code Online (Sandbox Code Playgroud)

但是,维基百科说,调和均值是为正实数定义的:

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


Che*_*rma 7

如果您使用的是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)
Run Code Online (Sandbox Code Playgroud)

它也有其他方法,如stdev,方差,众数,均值,中位数等,这些方法也非常有用。