沿第三轴的点积

时间:2016-03-16 09:03:18

标签: python numpy tensor dot-product

我正在尝试使用tensordot在numpy中使用张量点积,但我不确定如何重塑我的数组来实现我的计算。 (总的来说,我对张量的数学还很陌生。)

我有

arr = np.array([[[1, 1, 1],
                [0, 0, 0],
                [2, 2, 2]],

               [[0, 0, 0],
                [4, 4, 4],
                [0, 0, 0]]])

w = [1, 1, 1]

我想在axis=2上采用点积,这样我就有了矩阵

array([[3, 0, 6],
       [0, 12, 0]])

这个适当的numpy语法是什么? np.tensordot(arr, [1, 1, 1], axes=2)似乎提出ValueError

2 个答案:

答案 0 :(得分:12)

axis=2的{​​{1}}和arr的{​​{1}}减少了axis=0。因此,使用np.tensordot,解决方案将是 -

w

或者,也可以使用np.einsum -

np.tensordot(arr,w,axes=([2],[0]))

np.matmul也有效

np.einsum('ijk,k->ij',arr,w)

运行时测试 -

np.matmul(arr, w)

hlin117在Macbook Pro OS X El Capitan上测试,numpy版本1.10.4。

答案 1 :(得分:2)

使用SQLDeveloper对我来说效果很好:

.dot

虽然有趣的是比所有其他建议慢