2

我有两个数组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]]]
4

2 回答 2

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]])
于 2013-04-30T09:11:09.110 回答
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]]])
于 2013-04-30T09:13:36.133 回答