ZeroDivisionError:计算标准偏差时浮点除零
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZeroDivisionError:计算标准偏差时浮点除零相关的知识,希望对你有一定的参考价值。
我已经在我的脚本中发现了一个问题,即由于尝试使用scipy的.tstd函数进行标准差计算,
sp.stats.tstd(IR)
我的IR
值是0.0979
。有没有办法让它停止(我假设)将其舍入为零?我已经尝试过上一个stackoverflow帖子的建议,建议将号码称为np.float64
,但这不起作用。希望有人有答案。
完整错误打印输出:
Traceback (most recent call last):
File "Utt_test.py", line 995, in <module>
X.write(Averaging())
File "Utt_test.py", line 115, in Averaging
IR_sdev=str(round(sp.stats.tstd(IR),4))
File "/usr/lib64/python2.7/site-packages/scipy/stats/stats.py", line 848, in tstd
return np.sqrt(tvar(a,limits,inclusive))
File "/usr/lib64/python2.7/site-packages/scipy/stats/stats.py", line 755, in tvar
return a.var()*(n/(n-1.))
ZeroDivisionError: float division by zero
方法tstd
计算样本方差的平方根。样本方差与种群方差的不同之处在于因子n/(n-1)
,这是使样本方差成为种群方差的无偏估计所必需的。这分解为n = 1,这是可以理解的,因为有一个数字使我们不知道人口方差可能是什么。
如果这种调整是不合需要的(也许你的数组是总人口,而不是来自它的样本),请改用numpy.std。对于大小为1的数组,它将按预期返回0。如果与参数ddof = 1一起使用,则numpy.std
等同于stats.tstd
。
Asie:SciPy's documentation说
tstd计算无偏样本标准差,即它使用校正因子n /(n-1)。
重复这个标准误差估计器是无偏的常见误解(实际上,校正因子消除了方差的偏差,而不是标准偏差)。 NumPy's std documentation在讨论ddof
参数的这一点上证明是正确的
但是,如果指定了ddof,则使用除数N - ddof。在标准统计实践中,ddof = 1提供了无穷大群体方差的无偏估计。 ddof = 0提供正态分布变量的方差的最大似然估计。在此函数中计算的标准差是估计方差的平方根,因此即使ddof = 1,它也不会是标准偏差本身的无偏估计。
以上是关于ZeroDivisionError:计算标准偏差时浮点除零的主要内容,如果未能解决你的问题,请参考以下文章