NumPy中的标准差

47

这是我的代码:

import numpy as np
print(np.std(np.array([0,1])))

它产生了0.5

我相信这是不正确的。我做错了什么?


1
这是正确的。std = RMS(data - mean)。在这种情况下:std = sqrt((0.5^2 + 0.5^2) / 2) = sqrt(0.25) = 0.5 - Mad Physicist
2
@MadPhysicist, 谢谢,我刚刚对样本和总体标准差有些混淆。谷歌电子表格使用的是样本标准差,即 stdev。 - user1700890
5
将可选参数ddof设置为1,以获得总体标准差:http://docs.scipy.org/doc/numpy/reference/generated/numpy.std.html - Mad Physicist
6
顺便说一下,感谢您在顶部导入所需的内容。大多数人都会省略它,这使得他们的代码更难以复制粘贴到控制台中。 - Mad Physicist
1个回答

98

默认情况下,numpy.std返回总体标准差,因此 np.std([0,1]) 正确报告为 0.5。如果您正在寻找样本标准差,则可以向 std() 提供可选的 ddof 参数:

>>> np.std([0, 1], ddof=1)
0.70710678118654757

ddof修改了样本数减去平均值的平方和的除数。除数为N - ddof,其中默认的ddof0,这也可以从您的结果中看出。


1
我认为numpy的默认值是“总体”标准差,即N,而样本标准差为N-1。 - user1700890
我承认我的术语可能有些混淆。 - Mad Physicist
1
好的,这是最令人困惑的事情之一,因为同一个术语(“样本标准差”)用于两个相反的事情。与关于标准差的文章相反,有关贝塞尔校正的文章说:“这种校正非常常见,以至于经常使用术语“样本方差”和“样本标准差”来表示校正的估计量(无偏样本变异,更少偏差的样本标准差),使用n-1。” - Johannes Schaub - litb
2
无论是“仅拥有样本时使用标准差”还是“样本的标准差”,都存在歧义。但我认为,“总体标准差”这个术语是不含糊的。而NumPy并没有返回总体标准差,而是样本的标准差(即未经校正的)。 - Johannes Schaub - litb
@JohannesSchaub-litb。您能否帮忙纠正一下?自我写下这篇回答以后,时间已经很久了,而且我认为您现在对术语比我更熟悉。从您的解释中,我唯一确信的是,我一直被这些术语所困惑的原因 :) - Mad Physicist
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接