Don*_*beo 1 python statistics numpy r
当我尝试用numpy和R计算标准差时,得到两个不同的结果.可能有些愚蠢,我失踪但是什么?
R代码
x1=matrix(c(1,7,5,8,9,5,4,5,4,3,76,8),nrow=4)
std=sd(x1[,1])
mean=mean(x1[,1])
std=apply(X=x1,MARGIN=2,FUN=sd)
std
> x1=matrix(c(1,7,5,8,9,5,4,5,4,3,76,8),nrow=4)
> std=sd(x1[,1])
> std=apply(X=x1,MARGIN=2,FUN=sd)
> std
[1] 3.095696 2.217356 35.565667
Run Code Online (Sandbox Code Playgroud)
Python代码
import numpy as np
x1=np.matrix([[1.,9.,4.],[7.,5.,3.],[5.,4.,76.],[8.,5.,8.]])
std=np.apply_along_axis(func1d=np.std,axis=0,arr=x1)
std
Out[9]: array([ 2.68095132, 1.92028644, 30.80077109])
Run Code Online (Sandbox Code Playgroud)
这将为您提供与 numpy 相同的答案。请参阅R 中的标准差似乎返回错误答案 - 我做错了什么吗?和http://en.wikipedia.org/wiki/Standard_deviation供参考
apply(x1, 2, function(x) sd(x) * sqrt((length(x) - 1) / length(x)) )
Run Code Online (Sandbox Code Playgroud)
对于将来的搜索,R将标准偏差计算N - 1为分母,并numpy使用N.要获得相同的结果,请尝试此设置ddof("delta自由度")
x1.std(axis=0, ddof=1)
Run Code Online (Sandbox Code Playgroud)
请注意,您可以使用不同的表示法来节省大量的内容:
In [33]: x1.std(axis=0)
Out[33]: matrix([[ 2.68095132, 1.92028644, 30.80077109]])
In [34]: x1.std(axis=0, ddof=1)
Out[34]: matrix([[ 3.09569594, 2.21735578, 35.56566697]])
Run Code Online (Sandbox Code Playgroud)