在R和Python中计算标准偏差

Bog*_*dan 2 python r

Python和R是否有不同的方法来计算标准差(sd)?

例如,在python中,以开头:

a = np.array([[1,2,3],  [4,5,6], [7,8,9]])

print(a.std(axis=1)) 
### per row : [0.81649658 0.81649658 0.81649658]

print(a.std(axis=0)) 
### per column : [2.44948974 2.44948974 2.44948974]
Run Code Online (Sandbox Code Playgroud)

在R中:

z <- matrix(c(1,2,3,4,5,6,7,8,9), nrow=3, ncol=3, byrow=T)

# z
# [,1] [,2] [,3]
#[1,] 1 2 3
#[2,] 4 5 6
#[3,] 7 8 9

# apply(z, 1, sd)
sd(z[1,]) #1
sd(z[2,]) #1
sd(z[3,]) #1

# apply(z, 2, sd)
sd(z[,1]) #3
sd(z[,2]) #3
sd(z[,3]) #3
Run Code Online (Sandbox Code Playgroud)

RLa*_*ave 7

这是因为默认情况下,分母(docs)公式中的sd()from base-R使用。n-1

numpy而是n默认使用,但是您可以使用ddofdocs)指定n-1更正。

a = np.array([[1,2,3],  [4,5,6], [7,8,9]])
print(a.std(axis=1, ddof = 1)) 
[1. 1. 1.]
Run Code Online (Sandbox Code Playgroud)

基本上,mean可以使用 1 / n 要么 1 / n-1

请注意,如果较大,则两种方法之间的差异较小n。在示例中,这很明显,因为n=3尝试n=1000并观察差异。

另外读数上为什么n-1校正使用。