[英]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
是和减少的,而其余的轴 - i
和k
保留在输出中。
同样,这将比原生矩阵乘法慢: XTdot(X)
。 但是,我猜这篇文章更像是对einsum
的学习。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.