python numpy實現 標准差,方差


 

 

使用numpy可以做很多事情,在這篇文章中簡單介紹一下如何使用numpy進行方差/標准方差/樣本標准方差/協方差的計算。

variance: 方差

方差(Variance)是概率論中最基礎的概念之一,它是由統計學天才羅納德·費雪1918年最早所提出。用於衡量數據離散程度,因為它能體現變量與其數學期望(均值)之間的偏離程度。具有相同均值的數據,而標准差可能不同,而通過標准差的大小則能更好地反映出數據的偏離度。

計算:一組數據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)/4 = (2.25+0.25+0.25+2.25)/4 = 1.25

python的numpy庫中使用var函數即可求解,代碼&執行如下:

1
2
3
4
5
6
7
8
liumiaocn: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
12
liumiaocn: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
3
4
5
6
7
8
liumiaocn:tmp liumiao$ cat np - 7.py
#!/usr/local/bin/python
import numpy as np
arr = 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過來,請注意其實際的意義是標准偏差還是樣本標准偏差



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM