pythonnumpy实现标准差,⽅差
使⽤numpy可以做很多事情,在这篇⽂章中简单介绍⼀下如何使⽤numpy进⾏⽅差/标准⽅差/样本标准⽅差/协⽅差的计算。
variance: ⽅差
⽅差(Variance)是概率论中最基础的概念之⼀,它是由统计学天才罗纳德·费雪1918年最早所提出。⽤于衡量数据离散程度,因为它能体现变量与其数学期望(均值)之间的偏离程度。具有相同均值的数据,⽽标准差可能不同,⽽通过标准差的⼤⼩则能更好地反映出数据的偏离度。
计算:⼀组数据1,2,3,4,其⽅差应该是多少?
计算如下:numpy库不具有的功能有
均值=(1+2+3+4)/4=2.5
⽅差=((1-2.5)^2 + (2-2.5)^2 + (3-2.5)^2 +(4-2.5)^2)/4 = (2.25+0.25+0.25+2.25)/4 = 1.25
python的numpy库中使⽤var函数即可求解,代码&执⾏如下:
1 2 3 4 5 6 7 8liumiaocn:tmp liumiao$ cat np-5.py
#!/usr/local/bin/python
import numpy as np
arr =np.array([1,2,3,4])
print("variance of [1,2,3,4]:", np.var(arr)) liumiaocn:tmp liumiao$ python np-5.py ('variance of [1,2,3,4]:', 1.25) liumiaocn:tmp liumiao$
standard deviation: 标准偏差
标准偏差=⽅差的开放,所以:
计算:⼀组数据1,2,3,4,其标准偏差应该是多少?
计算就很简单了,对其求出的⽅差1.25进⾏开⽅运算即可得到⼤约1.118可以使⽤numpy库中的std函数就可以⾮常简单的求解,代码&执⾏如下:1
2 3 4 5 6 7 8 9 10 11 12liumiaocn:tmp liumiao$ cat np-6.py
#!/usr/local/bin/python
import numpy as np
arr =np.array([1,2,3,4])
print("variance of [1,2,3,4]:", np.var(arr))
print("sqrt of variance [1,2,3,4]:",np.sqrt(np.var(arr))) print("standard deviation: np.std()", np.std(arr)) liumiaocn:tmp liumiao$ python np-6.py
('variance of [1,2,3,4]:', 1.25)
('sqrt of variance [1,2,3,4]:', 1.118033988749895) ('standard deviation: np.std()', 1.118033988749895) liumiaocn:tmp liumiao$
sample standard deviation:样本标准偏差
标准偏差是对总体样本进⾏求解,如果有取样,则需要使⽤样本标准偏差,它也是⼀个求开⽅的运算,但是对象不是⽅差,⽅差使⽤是各个数据与数学均值的差的求和的均值,简单来说除的对象是N,样本偏差则是N-1。
计算:⼀组数据1,2,3,4,其样本标准偏差应该是多少?
计算如下:
均值=(1+2+3+4)/4=2.5
样本标准偏差的⽅差=((1-2.5)^2 + (2-2.5)^2 + (3-2.5)^2 +(4-2.5)^2)/3 = (2.25+0.25+0.25+2.25)/4 = 5/3
所以对5/3开⽅运算所得到的就是样本标准偏差为:1.29
同样适⽤numpy的std函数就可以做到这点,只需要将其⼀个Optional的参数设定为1即可,代码&执⾏如下:
1 2 3liumiaocn:tmp liumiao$ cat np-7.py #!/usr/local/bin/python
import numpy as np
4 5 6 7 8arr =np.array([1,2,3,4])
print("sample standard deviation: np.std()", np.std(arr, ddof=1)) liumiaocn:tmp liumiao$ python np-7.py
('sample standard deviation: np.std()', 1.2909944487358056) liumiaocn:tmp liumiao$
注意:matlab中的std实际指的是样本标准偏差,这点需要注意,如果你的代码从matlab上copy过来,请注意其实际的意义是标准偏差还是样本标准偏差