我正在尝试使用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
。
答案 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
虽然有趣的是比所有其他建议慢