【问题标题】:Simple implementation of NumPy cov (covariance) functionNumPy cov(协方差)函数的简单实现
【发布时间】:2014-05-26 11:20:20
【问题描述】:

我试图实现这里给出的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.]]  
"""

出了什么问题?

【问题讨论】:

  • 有哪些错误和结果,您有什么期望?
  • 对于那些忘记了统计类并想知道这里出了什么问题的人:正确的结果是np.cov(x),而用户的结果是不正确的。
  • 这个问题应该重新打开。它包含代码、所需结果和参考资料。可惜我对这个主题的了解不足以回答自己。

标签: python numpy covariance


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2013-11-11
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    相关资源
    最近更新 更多