我有两个张量,我需要做以下事情:
C[i, j, k, l, a, b] = A[i, j, k, l] * B[a, b, k, l]
因此,正如您所看到的,k
和l
之间没有总和。所以,我无法申请tensordot
。
答案 0 :(得分:0)
以下是解决方案:
C = a.dimshuffle(0, 1, 2, 3, 'x', 'x') * b.dimshuffle('x', 'x', 2, 3, 0, 1)
以下是解释:
您尝试归档两个目标:
如果使用成对乘法,那么配对索引将不会求和(与tensordot
不同,后者在成对索引/轴上求和)。因此,第二个目标是通过使用成对乘法来实现的。
现在你需要实现第一个目标。每个默认的成对乘法将第一张量的所有索引与第二张量的所有对应索引配对(第一个带有第一个,第二个带有第二个,依此类推)。为避免使用dimshuffle
来对齐必须配对的索引,并使用“x”为不应配对的索引引入“虚拟”轴。在您的特定示例中,它应该是这样的: