2013-04-30 69 views
2

我有兩個數組A=[1,2,3]B=[[1],[0],[1],[0]]。如何在Python中執行張量點產品的問題。我期待得到:python中的張量點操作

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

函數np.tensordot()返回有關數組形狀的錯誤。

這個問題稍加補充。使用正確的numpy陣列

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]]] 
+0

關於另外:我不知道是什麼的這些點乘法的結果應該是。也許如果你給出了一個更詳細的解釋你想如何計算,我們可以找出方法來使'numpy'爲你做:) – Alfe 2013-04-30 11:56:18

回答

6

搜索:如何做這樣的操作,如果矩陣的形狀完全不同,就像

>>> 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]]) 
+0

這有點晚,但...是最快使用'點'比'tensordot'?對於所有實際目的,它們是否輸出相同的結果? – pysolver 2016-04-01 20:54:04

2

我不那麼專家,這種說法,但如果你試圖改變軸在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]]])