简单实现NumPy cov(协方差)函数

时间:2014-05-20 13:46:38

标签: python numpy covariance

我正在尝试实现此处给出的numpy.cov()函数:numpy cov (covariance) function, what exactly does it compute?,但我得到了一些奇怪的结果。请纠正我:

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.]]  
"""

出了什么问题?

1 个答案:

答案 0 :(得分:2)

您的函数和np.cov(默认情况下)都假设X的行对应变量,而列对应于观察

当您通过减去平均值来X居中时,您需要计算观察值的平均值,即X的列而不是行:

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