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

标签 python numpy statistics scipy

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

相关文章:

python:找到两个 gaussian_kde 函数(对象)的交集

python - 为什么 os.path.expanduser 不返回主目录?

python : Geomspace and Logspace do not return true boundaries

Python/numpy 浮点文本精度

python - 在循环的每次迭代中将函数作为 python 中的新进程运行

python - 实现数字方法总是返回 NotImplemented

python - NumPy 具有重叠切片的就地运算

r - 关于 e1071 R 包中朴素贝叶斯算法的查询

java - 使用java 8 Stream分割ArrayList并进行统计

machine-learning - 为什么假设要引入两个参数,即θ0和θ1