2

私は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 に答える