标准差法和标准差法给予的结果略有不同。我不明白为什么。有人能给我解释一下吗?这里有一个例子。
import numpy as np import scipy.stats ar = np.arange(20) print(np.std(ar)) print(scipy.stats.tstd(ar))
返回
5.766281297335398 5.916079783099616
voase2hg1#
它在我的脑海里一段时间前..得到同样的价值观
import numpy as np import scipy.stats ar = np.arange(20) print(np.std(ar, ddof=1)) print(scipy.stats.tstd(ar))
输出编号
5.916079783099616 5.916079783099616
我的导师常说--〉ddof=1,如果您正在计算取自完整数据集的样本的np.std()。---〉ddof=0如果计算的是全部人口
ddof=1
np.std()
ddof=0
bnlyeluc2#
使用np.std()计算标准差:
x = np.abs(ar - ar.mean())**2 std = np.sqrt(np.sum(x) / len(ar)) # 5.766281297335398
但是,对于scipy.stats.tstd,您计算的是修剪后的标准差:
scipy.stats.tstd
x = np.abs(ar - ar.mean())**2 std = np.sqrt(np.sum(x) / (len(ar) - 1)) # 5.916079783099616
请注意,当使用np.std()时,计算的是x的平均值的平方根(x的平均值是x的和除以x的长度)。当计算修剪后的版本时,计算的是除以n-1,n是数组的长度。
x
n-1
n
2条答案
按热度按时间voase2hg1#
它在我的脑海里一段时间前..得到同样的价值观
输出编号
我的导师常说
--〉
ddof=1
,如果您正在计算取自完整数据集的样本的np.std()
。---〉
ddof=0
如果计算的是全部人口bnlyeluc2#
使用
np.std()
计算标准差:但是,对于
scipy.stats.tstd
,您计算的是修剪后的标准差:请注意,当使用
np.std()
时,计算的是x
的平均值的平方根(x
的平均值是x
的和除以x
的长度)。当计算修剪后的版本时,计算的是除以n-1
,n
是数组的长度。