python中的张量点运算

时间:2013-04-30 09:02:41

标签: python matrix numpy

我有两个数组A=[1,2,3]B=[[1],[0],[1],[0]]。如何在python中执行张量点积的问题。我期待得到:

C=[[1,2,3],
   [0,0,0],
   [1,2,3],
   [0,0,0]]

函数np.tensordot()返回有关数组形状的错误。

这个问题的一点补充。如果矩阵的形状完全不同,如何进行此类操作,如:

A=[[1,1,1,1],
   [1,1,1,1],
   [2,2,2,2],
   [3,3,3,3]]

B=[2,1]

C=[[[2,1],[2,1],[2,1],[2,1]],
   [[2,1],[2,1],[2,1],[2,1]],
   [[4,2],[4,2],[4,2],[4,2]],
   [[6,3],[6,3],[6,3],[6,3]]]

2 个答案:

答案 0 :(得分:6)

尝试使用正确的numpy数组:

>>> array([[1],[2],[3]]).dot(array([[1,0,1,0]]))
array([[1, 0, 1, 0],
       [2, 0, 2, 0],
       [3, 0, 3, 0]])

如果对齐方式不同,使用a.transpose()可以将其翻转:

>>> array([[1],[2],[3]]).dot(array([[1,0,1,0]])).transpose()
array([[1, 2, 3],
       [0, 0, 0],
       [1, 2, 3],
       [0, 0, 0]])

如果您(无论出于何种原因)必须使用tensordot(),请尝试以下操作:

>>> numpy.tensordot([1,2,3], [1,0,1,0], axes=0)
array([[1, 0, 1, 0],
       [2, 0, 2, 0],
       [3, 0, 3, 0]])

答案 1 :(得分:3)

我对这个论点并不是那么专家,但是如果你尝试在numpy中改变轴,它会起作用:

A=[1,2,3]
B=[[1],[0],[1],[0]]
np.tensordot(B, A, axes=0)
array([[[1, 2, 3]],

   [[0, 0, 0]],

   [[1, 2, 3]],

   [[0, 0, 0]]])