Python中的Harmonic Mean函数(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中可能是正数还是负数?
答案 0 :(得分:27)
调和平均值仅针对正实数组定义。如果你尝试用负数计算它,你就会得到各种奇怪和无用的结果,即使你没有将div命中为0.例如,将公式应用于集合(3,-3,4)给出了一个意思12!
答案 1 :(得分:11)
你可以使用谐波均值定义方程:
len(a) / np.sum(1.0/a)
但是,维基百科说谐波均值是为正实数定义的:
答案 2 :(得分:3)
如果您使用的是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,variance,mode,mean,median等,这些方法太有用了。
答案 3 :(得分:2)
调和均值本身的数学定义并不禁止应用于负数(尽管您可能不想计算+1和-1的调和平均值),但是,它设计用于计算比率等的均值它会对每个数据点赋予相同的权重,而在算术平均值或者这样的极端数据点的比例会获得很高的权重,因此是不希望的。
所以你要么像@HYRY建议的那样自己硬编码定义,要么可能在错误的语境中应用了调和均值。