对于二维矩阵 X
(形状 (m,n)
),我正在尝试计算 X.T * X
,其中 *
是矩阵乘法。 Following the explanation on this post 我希望能够使用 np.einsum('ji,ik->jk', X, X)
来做到这一点,其中在 LHS 上编写 ji
首先采用第一个 X
参数的转置,然后将其乘以第二个 X
参数。
这不适用于错误(对于 (m,n) = (3,4)
):
然而,这有效: np.einsum('ij,jk->ik', X.T, X)
。我在这里缺少什么?为什么它甚至在中间添加一个轴?
最佳答案
使用 X.T * X
(* 是矩阵乘法),您将第一个 X's transpose
的第二个轴与第二个 X
的第一个轴相减。现在,第一个 X's transpose
的第二个轴将与第一个 X
的第一个轴相同。因此,我们只是对这两个 X's
的第一个轴进行求和,而其余的轴保持不变。
要在 einsum
上复制它,请保持字符串符号中的第一个字符相同,而两个输入的第二个轴的不同,如下所示 -
np.einsum('ji,jk->ik', X, X)
因此,
j's
是 sum-reduced,而其余的轴 - i
和 k
保留在输出中。同样,这将比本地矩阵乘法慢:
X.T.dot(X)
。但是,我猜这篇文章更像是对 einsum
的学习。关于python - 使用 numpy.einsum 进行转置时间矩阵 : x^T * x,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46367441/