NumPy协方差函数的简单实现

1 投票
1 回答
3640 浏览
提问于 2025-04-18 07:05

我在尝试实现 numpy.cov() 这个函数,具体内容可以在这里找到: 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.]]  
"""

到底哪里出错了呢?

1 个回答

6

你的函数和默认情况下的 np.cov 都假设 X 的行代表的是 变量,而列代表的是 观测值

当你通过减去平均值来对 X 进行中心化时,你需要计算的是 观测值 的平均值,也就是 X 的列,而不是行:

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

撰写回答