由于尝试使用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
答案 0 :(得分:0)
方法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,也不会对标准偏差本身进行无偏估计。