我有一个大小为(1875, 77)
的矩阵X
。对于每一列,我想计算协方差矩阵,即x_1 @ x_1.T
,其中x_1
具有形状(1875, 1)
。理想情况下,我希望在没有for循环的情况下一次性完成这项工作。有简单的方法吗?
我曾考虑根据列索引上下每列填充0(因此x_1
将有76列零,x_2
将在顶部有一个(77, 1)
零列填充和75个零列填充(,但这似乎会使事情更加复杂。
您可能想要这个:
import numpy as np
r, c = 1875, 77
X = np.random.rand(r, c)
covs = X.T[..., None] @ X.T[:, None, :]
covs.shape
# (77, 1875, 1875)
这简单地执行c
个矩阵乘法,对于X
的每列为1。这里,X.T[..., None]
的形状为(c,r,1(,X.T[:, None, :]
的形状为(c,1,r(