概述
我们用Matlab作为对比。计算标准差,得到:
>> std([1,2,3])
ans =
1
然而在numpy中:
>>> np.std([1,2,3])
0.81649658092772603
什么鬼!这么简单的都能出错?原因在于,np.std有这么一个参数:
ddof : int, optional
Means Delta Degrees of Freedom. The divisor used in calculations is N - ddof, where N represents the number of elements. By default ddof is zero.
因此,想要正确调用,必须使ddof=1:
>>> np.std([1,2,3], ddof=1)
1.0
而且,这一特性还影响到了许多基于numpy的包。比如scikit-learn里的StandardScaler。想要正确调用,只能自己手动设置参数:
ss = StandardScaler()
ss.mean_ = np.mean(X, axis=0)
ss.scale_ = np.std(X, axis=0, ddof=1)
X_norm = ss.transform(X)
当X数据量较大时无所谓,当X数据量较小时则要尤为注意。
最后
以上就是无私大侠为你收集整理的numpy中标准差std的神坑的全部内容,希望文章能够帮你解决numpy中标准差std的神坑所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复