numpy cov(协方差)函数,它到底计算什么?

2024-04-29 01:15:09 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

即外部产品的总和。但在文献中没有提到,它只是说“估计协方差矩阵”。

有人能确认这是否是它内部的功能吗?(我知道我可以用bias参数更改前面的常量。)


Tags: the功能numpy产品is矩阵meanwhere
2条回答

是的,这就是numpy.cov计算的结果。FWIW,我比较了numpy.cov的输出与显式迭代样本(如您提供的伪代码)以比较性能,结果输出数组中的差异是由于浮点精度而预期的。

如您所看到的,在最简单的情况下,没有掩码,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而不是来自Mr E的链接,除非您对屏蔽数组感兴趣。正如你提到的,the documentation并不好。

[1]这在本例中是有效的(但不完全是)外积,因为(x-m)具有长度为MN列向量,因此(x-m).T与行向量一样多。最终的结果是所有外部产品的总和。如果顺序颠倒,同样的*将给出内部(标量)积。但是,从技术上讲,这两个都只是标准矩阵乘法,真正的外积只是列向量与行向量的乘积。

相关问题 更多 >