张量的numpy dot积(3d次2d)

时间:2017-08-01 14:45:17

标签: arrays numpy tensor numpy-einsum

目前我使用

Na = (3, 2, 4)
Nb = Na[1:]
A = np.arange(np.prod(Na)).reshape(Na)
b = np.arange(np.prod(Nb)).reshape(Nb)

我想计算:

r_ik = sum_j(A_ijk * b_jk)

r = np.empty((A.shape[0], A.shape[2])
for i in range(A.shape[2]):
    r[:, i] = np.dot(A[:, :, i], b[:, i])

单词:A是“4个矩阵的堆栈”(形状(3,2)),即3d数组,b是“4个向量的堆栈”(形状(3,)),即2d - 阵列。期望的结果是“4个矩阵矢量乘积的堆栈”,即一堆矢量,即同样是2d阵列(形状(3,4))。

我对np.einsum和np.tensordot有一个中等深度的外观,但我用这些构建的任何解决方案至少与我的循环解决方案一样长且不易读。

但是我觉得这个简单的问题应该有一个单行。

1 个答案:

答案 0 :(得分:5)

我不确定为什么np.einsum不适合你。这个应该做的伎俩:

r = np.einsum('ijk,jk->ik', A, b)

我认为这是非常易读的,因为它完全反映了你在问题中给出的数学公式。