我假设numpy.cov(X)
将样本协方差矩阵计算为:
1/(N-1) * Sum (x_i - m)(x_i - m)^T (where m is the mean)
即外部产品的总和。但是在文档中没有任何地方实际上这么说,它只是说“估计一个协方差矩阵”。
任何人都可以确认这是否是它内部的作用? (我知道我可以使用bias
参数更改前面的常量。)
答案 0 :(得分:3)
正如您所看到的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
的{{1}}列向量,因此M
是尽可能多的行向量。最终结果是所有外部产品的总和。如果订单被颠倒,相同的(x-m).T
将给出内部(标量)产品。但是,从技术上讲,这些都只是标准的矩阵乘法,真正的外积只是列向量到行向量的乘积。
答案 1 :(得分:0)
是的,这就是numpy.cov
计算的内容。 FWIW,我已将numpy.cov
的输出与显式迭代样本(如您提供的伪代码)进行比较,以比较性能,结果输出数组的差异是由于浮点精度所致。 / p>