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:计算标准偏差时浮点除零的主要内容,如果未能解决你的问题,请参考以下文章

Python - 如何计算标准化频率的标准偏差

标准偏差计算在 C# 中不起作用?

嵌套for循环慢python用于计算特殊标准偏差

计算松树系列中最后N个元素的标准偏差

您如何使用 scikit-learn 中的惯性计算差距统计的标准偏差?

如何有效地计算运行标准偏差?