A的协方差可以用来计算A'*A吗?

Can covariance of A be used to calculate A'*A?

我正在 python 中以不同的方式进行基准测试以计算 A'*A,其中 A 是一个 N x M 矩阵。最快的方法之一是使用 numpy.dot().

我很好奇我是否可以通过某种方式改变权重或通过某种方式预处理 A 矩阵来使用 numpy.cov()(给出协方差矩阵)获得相同的结果?但我没有成功。有谁知道乘积 A'*A 与 A 的协方差之间是否存在任何关系,其中 A 是具有 N rows/observations 和 M columns/variables 的矩阵?

看看 cov source。在函数末尾,它执行以下操作:

c = dot(X, X_T.conj())

这基本上就是您要执行的点积。但是,还有各种其他操作:检查输入、减去平均值、归一化……

简而言之,np.cov 永远不会比 np.dot(A.T, A) 快,因为它在内部完全包含该操作。

也就是说 - covariance matrix is computed

或 Python:

import numpy as np

a = np.random.rand(10, 3)

m = np.mean(a, axis=0, keepdims=True)
x = np.dot((a - m).T, a - m) / (a.shape[0] - 1)

y = np.cov(a.T)

assert np.allclose(x, y)  # check they are equivalent

如您所见,如果您减去每个变量的均值并将结果除以样本数(减一),则协方差矩阵等于原始点积。