python - 如何广播向量和张量之和?

标签 python numpy matrix-multiplication tensor array-broadcasting

假设我们有:

  • 形状为 (F,1) 的行向量 V,以及
  • 形状为 (N, F, X, Y) 的 4-D 张量 T

作为一个具体示例,令 N, F, X, Y = 2, 3, 2, 2。令V = [v0, v1,v2]

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

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

我尝试过使用np.einsum()np.tensordot(),但我无法弄清楚每个函数实际上在做什么更基本的水平,所以我想请求更详细的解释如何完成这个计算。

谢谢

最佳答案

乘法:您只需将文本转换为 eisnum 的索引名称,它将负责广播:

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

添加:只需使用 None 将尺寸添加到 V 中即可匹配 T 的最后两个尺寸广播将处理剩下的事情:

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

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

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]]]]

关于python - 如何广播向量和张量之和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63222872/

相关文章:

python - Django:如何在相关字段的相关字段上排序

c++ - 并行分配给 std::vector<std::vector<double>>

python - 对大 numpy 数组中的每几行进行平均

python - Pandas 应用功能并更新数据框的副本

matrix - 了解 APL 的内积

python - 使用 Keras 训练时的 Tensorflow InvalidArgumentError(索引)

python - 错误 :permission_manager_qt. cpp(82) 不支持的权限类型:13

javascript - 在 Django 模板过滤器中使用 jquery 中的变量

python - 将 Python NumPy 数组插入 PostgreSQL 数据库

python - SymPy:lambdified dot() with (3,n)-array