Python numpy cov(协方差)函数,它到底计算什么?
我假设Python numpy cov(协方差)函数,它到底计算什么?,python,numpy,statistics,scipy,Python,Numpy,Statistics,Scipy,我假设numpy.cov(X)将样本协方差矩阵计算为: 1/(N-1) * Sum (x_i - m)(x_i - m)^T (where m is the mean) 即外积之和。但在文档中,它实际上没有这样说,它只是说“估计协方差矩阵” 有人能确认这是否是它内部所做的吗?(我知道我可以用bias参数改变前面的常数。)是的,这就是numpy.cov计算的。FWIW,我已经将numpy.cov的输出与显式迭代样本(如您提供的伪代码)进行了比较,以比较性能,结果输出数组中的差异是由于浮点精度而产
numpy.cov(X)
将样本协方差矩阵计算为:
1/(N-1) * Sum (x_i - m)(x_i - m)^T (where m is the mean)
即外积之和。但在文档中,它实际上没有这样说,它只是说“估计协方差矩阵”
有人能确认这是否是它内部所做的吗?(我知道我可以用
bias
参数改变前面的常数。)是的,这就是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
如果您想查看源代码,而不是Mr E的链接,除非您对屏蔽数组感兴趣。正如你所提到的,这不是很好
[1] 在这种情况下,它是有效的(但不是确切的)外积,因为
(x-m)
具有长度m
的N
列向量,因此(x-m)。T
是同样多的行向量。最终结果是所有外积的总和。如果顺序颠倒,相同的*
将给出内部(标量)乘积。但是,从技术上讲,这些都只是标准的矩阵乘法,真正的外积只是列向量到行向量的乘积。对,这等于我的外积之和吗?@Andrew是的,我在回答你和其他人的问题时,试图让它更清楚。