我希望能够快速计算n个外积的总和。
基本上,我从正态分布生成了两个矩阵 - 共有n个长度为v的向量:
A = np.random.normal(size = (n, v))
B = np.random.normal(size = (n, v))
我希望能够计算A和B中每个大小为v的向量的外积,并将它们加在一起。
请注意,A*B.T不起作用——A的大小为n x v,而B的大小为v x n。
我能做的最好的办法是创建一个循环,在其中构造外积,然后稍后进行求和。我已经这样做了:
outers = np.array([A[i] * B[i].T])
这会创建一个n x v x v的数组(循环在列表推导式中,随后转换为数组),然后我可以使用np.sum(outers, axis = 0)
将其相加。然而,这样做速度相当慢,我想知道是否有向量化函数可以加速。
如果有人有任何建议,我会非常感激!
np.matrix
对象进行乘法运算,而不是np.ndarray
。A * B.T
等同于np.dot(A, B.T)
,A.T * B
等同于np.dot(A.T, B)
。它应该非常接近np.einsum
的速度。 - Jaime