我假设numpy.cov(X)将样本协方差矩阵计算为:

1/(N-1) * Sum (x_i - m)(x_i - m)^T (where m is the mean)

即外部产品总和。但是文档中没有任何地方真正说出这一点,只是说“估计协方差矩阵”。

任何人都可以确认这是否是内部的吗? (我知道我可以使用bias参数将常量更改为最前面。)

最佳答案

您可以看到source,在最简单的情况下没有掩码,并且每个N变量都带有M样本,它将返回(N, N)协方差矩阵,其计算公式如下:

(x-m) * (x-m).T.conj() / (N - 1)

其中*代表矩阵乘积[1]

大致实现为:
X -= X.mean(axis=0)
N = X.shape[1]

fact = float(N - 1)

return dot(X, X.T.conj()) / fact

如果您想查看源代码,请使用look here而不是E先生的链接,除非您对掩码数组感兴趣。如您所述,the documentation不好。

[1]在这种情况下有效(但不是完全)是外部乘积,因为(x-m)具有长度为NM列向量,因此(x-m).T是许多行向量。最终结果是所有外部乘积的总和。如果顺序相反,则相同的*将给出内部(标量)乘积。但是,从技术上讲,它们都是标准矩阵乘法,真正的外部乘积仅是列向量与行向量的乘积。

关于python - numpy cov(协方差)函数,它究竟计算什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16062804/

10-12 16:19