我尝试将 matlab 代码转换为 numpy 并发现 numpy 与 std 函数有不同的结果。
在Matlab中
std([1,3,4,6])
ans = 2.0817
in numpy
np.std([1,3,4,6])
1.8027756377319946
这是正常的吗?我应该如何处理这个问题?
NumPy 函数np.std采用可选参数ddof
:“自由度增量”。默认情况下,这是0
。将其设置为1
获取 MATLAB 结果:
>>> np.std([1,3,4,6], ddof=1)
2.0816659994661326
为了添加更多背景信息,在计算方差(其中标准差是平方根)时,我们通常除以我们拥有的值的数量。
但如果我们随机选择一个样本N
来自较大分布的元素并计算方差,除以N
可能会导致低估实际方差。为了解决这个问题,我们可以降低除以的数字(自由度) 为小于N
(通常N-1
). The ddof
参数允许我们按指定的量更改除数。
除非另有说明,NumPy 将计算biased方差估计量 (ddof=0
,除以N
)。如果您正在处理整个分布(而不是从较大分布中随机选取的值的子集),这就是您想要的。如果ddof
给定参数,NumPy 除以N - ddof
反而。
MATLAB 的默认行为std
是通过除以来纠正样本方差的偏差N-1
。这消除了标准差中的部分(但可能不是全部)偏差。如果您在较大分布的随机样本上使用该函数,这可能就是您想要的。
@hbaderts 的精彩回答给出了进一步的数学细节。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)