numpy cov(协方差)函数,究竟是什么计算的?

时间:2013-04-17 14:30:06

标签: python numpy statistics scipy

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

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

即外部产品的总和。但是在文档中没有任何地方实际上这么说,它只是说“估计一个协方差矩阵”。

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

2 个答案:

答案 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>