我正在python中进行基准测试,以不同的方式计算A'* A,其中A是N×M矩阵。最快的方法之一是使用numpy.dot()
。
我很好奇,如果我可以通过某种方式改变权重或以某种方式预处理A矩阵,使用numpy.cov()
(它给出协方差矩阵)获得相同的结果?但我没有成功。有没有人知道产品A'* A和A的协方差之间是否存在任何关系,其中A是具有N行/观测和M列/变量的矩阵?
答案 0 :(得分:1)
查看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
如您所见,如果您减去每个变量的平均值并将结果除以样本数(减1),则协方差矩阵等效于原始点积。