我假设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)
具有长度为N
的M
列向量,因此(x-m).T
是许多行向量。最终结果是所有外部乘积的总和。如果顺序相反,则相同的*
将给出内部(标量)乘积。但是,从技术上讲,它们都是标准矩阵乘法,真正的外部乘积仅是列向量与行向量的乘积。关于python - numpy cov(协方差)函数,它究竟计算什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16062804/