为何numpy与scipy.stats计算的标准差结果不一致?求解答
numpy与scipy.stats标准差计算差异的原因
两者的差异核心在于计算时使用的除数不同:
numpy.std()默认计算的是总体标准差,公式中除以样本总数N(你的示例里是20)。scipy.stats.tstd()计算的是样本标准差,公式中除以N-1(你的示例里是19),这是为了对总体方差做无偏估计。
拿你的示例验证:
数组 ar = np.arange(20) 的均值是9.5,所有元素与均值的平方和为665.0:
- numpy计算:
sqrt(665 / 20) = sqrt(33.25) ≈ 5.76628,和输出一致。 - scipy计算:
sqrt(665 / 19) = sqrt(35) ≈ 5.91608,也和输出匹配。
如果想让numpy得到和scipy一样的结果,只需设置ddof=1参数:
print(np.std(ar, ddof=1)) # 输出会是5.916079783099616
内容的提问来源于stack exchange,提问作者Ben2209
相关产品推荐
相关产品推荐

