张量收缩ten1_Air与ten2_Ckr

时间:2019-08-12 18:46:53

标签: python numpy

我正在尝试将张量ten1_Air与ten2_Ckr(其中,i = k)收缩以获得张量test_ACi

我认为在i = k的情况下,正确的einsum为:

test_ACi = np.einsum('Air,Cir->ACi',ten1_Air,ten2_Ckr)

但是,正确的格式似乎是:

test_ACi = np.einsum('Air,Ckr->ACi',ten1_Air,ten2_Ckr)

其中哪些收缩是正确的,为什么?我将不胜感激。

1 个答案:

答案 0 :(得分:1)

'Air,Cir->ACi'

i维度实际上经过-尽管移动到最后。 r维是求和的维(如矩阵乘积)。在常规的dot格式中,该格式为

loop on i:
    dot(Ar, rC)

使用

'Air,Ckr->ACi'

A,C,r表现相同。 i通过。如在ten2_Ckr.sum(axis=1)

中,对'k'求和

基本规则是,对出现在左侧但不在右侧的尺寸进行求和。求和因它们仅出现在左侧之一或两者中的位置而异。其他维度通过,某些行为更像是“批处理”维度,其他行为更像“外部”对。