繁体   English   中英

使用numpy.einsum作为转置时间矩阵:x ^ T * x

[英]Using numpy.einsum for transpose times matrix: x^T * x

对于2D矩阵X (形状(m,n) ),我试图计算XT * X ,其中*是矩阵乘法。 在对这篇文章的解释之后,我希望能够使用, np.einsum('ji,ik->jk', X, X)在LHS上写ji首先采用第一个X参数的转置,然后将它乘以第二个X参数。

这不适用于错误(对于(m,n) = (3,4) ):

ValueError: operands could not be broadcast together with remapped shapes [original->remapped]: (4,3)->(4,newaxis,3) (4,3)->(3,4)

但这有效: np.einsum('ij,jk->ik', XT, X) 我在这里错过了什么? 为什么它甚至在中间添加一个轴呢?

使用XT * X (*是矩阵乘法),您可以将第一个X's transpose的第二个轴与第二个X的第一个轴相减。 现在,第一第二轴X's transpose是相同第一的第一轴X 因此,我们只是将这两个X's第一个轴进行求和,而其余的轴保持不变。

要在einsum上复制它,保持字符串表示法中的第一个字符相同,而对于两个输入的第二个轴,保持不同的字符,如下所示 -

np.einsum('ji,jk->ik', X, X)

因此, j's是和减少的,而其余的轴 - ik保留在输出中。

同样,这将比原生矩阵乘法慢: XTdot(X) 但是,我猜这篇文章更像是对einsum的学习。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM