如何广播求和向量和张量?

How to Broadcast Sum Vector and Tensor?

假设我们有:

举个具体的例子,让N, F, X, Y = 2, 3, 2, 2。让V = [v0, v1,v2].

然后,我想按元素将 v0 添加到内部 2x2 矩阵 T[0,0],将 v1 添加到 T[0,1],并将 v2 添加到 T[0,2]。同样,我想将 v0 添加到 T[1,0],将 v1 添加到 T[1,1],将 v2 添加到 T[1,2]

因此,在“最内层”级别,2x2 矩阵和标量之间的加法,例如T[0,0] + v0,使用广播来逐元素添加 v0。然后我要做的是更普遍地将其应用于每个内部 2x2。

我试过使用 np.einsum()np.tensordot(),但我无法弄清楚每个函数在更基本的层面上实际上做了什么,所以我想问一个有关如何完成此计算的更多分步说明。

谢谢

相乘:你可以简单地将你的文本翻译成eisnum的索引名称,它会负责广播:

TV = np.einsum('ijkl,j->ijkl',T,V)

添加:只需使用NoneV添加维度以匹配T的最后两个维度,广播将需要剩下的照顾:

TV = T + V[:,None,None]

示例 input/output 显示了添加所需的输出行为:

T:

[[[[7 4]
   [5 9]]

  [[0 3]
   [2 6]]

  [[7 6]
   [1 1]]]


 [[[8 0]
   [8 7]]

  [[2 6]
   [9 2]]

  [[8 6]
   [4 9]]]]

V:

[0 1 2]

电视:

[[[[ 7  4]
   [ 5  9]]

  [[ 1  4]
   [ 3  7]]

  [[ 9  8]
   [ 3  3]]]


 [[[ 8  0]
   [ 8  7]]

  [[ 3  7]
   [10  3]]

  [[10  8]
   [ 6 11]]]]