我假设 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/