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是的,我在回答你和其他人的问题时,试图让它更清楚。