Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

different results for standard deviation using numpy and R [duplicate]

I get two different results when I try to compute the standard deviation with numpy and R . There is probably something of stupid that I am missing but what?

R code

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

Python code

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])
like image 990
Donbeo Avatar asked Dec 01 '22 02:12

Donbeo


1 Answers

For future searches, R calulates the standard deviation with N - 1 as the denominator, and numpy with N. To get the same result try this setting ddof (the "delta degrees of freedom" )

x1.std(axis=0, ddof=1)

Note that you can save a lot of cruft by using different notation:

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]])
like image 69
danodonovan Avatar answered Dec 05 '22 01:12

danodonovan