2014-05-20 53 views
0

我試圖實現numpy.cov()函數,如下所示:numpy cov (covariance) function, what exactly does it compute?,但我得到了一些奇怪的結果。請糾正我:簡單實現NumPy cov(協方差)函數

import numpy as np 
def my_covar(X): 
    X -= X.mean(axis=0) 
    N = X.shape[1] 
    return np.dot(X, X.T.conj())/float(N-1) 

X = np.asarray([[1.0,1.0],[2.0,2.0],[3.0,3.0]]) 

## Run NumPy's implementation 
print np.cov(X) 
""" 
NumPy's output: 
[[ 0. 0. 0.] 
[ 0. 0. 0.] 
[ 0. 0. 0.]] 
""" 

## Run my implementation 
print my_covar(X) 
""" 
My output: 
[[ 2. 0. -2.] 
[ 0. 0. 0.] 
[ -2. 0. 2.]] 
""" 

怎麼回事?

+0

你能指望什麼錯誤和結果? – Mark

+4

對於那些忘記統計類的人,想知道這裏有什麼問題:正確的結果是'np.cov(x)',用戶結果不正確。 –

+0

這個問題應該**重新打開**。它包含代碼,期望的結果和參考資料。只是一個恥辱,我不知道這個問題足以回答自己。 – JasonMArcher

回答

2

無論你的函數和np.cov(默認)假設的X行對應變量,並且列對應於觀察

當你減去平均中心X,你需要計算的平均值超過觀察,即X列,而不是行:

X -= X.mean(axis=1)[:, None] 
+0

哦,傻了。謝謝。 – hrs