簡體   English   中英

Python: numpy.dot / numpy.tensordot 用於多維 ZA3CBC3F9D0CE1F2C159CZD71D71B

[英]Python: numpy.dot / numpy.tensordot for multidimensional arrays

我正在優化反向傳播算法的實現以訓練神經網絡。 我正在研究的一個方面是對一組數據點(輸入/輸出向量)執行矩陣運算作為由 numpy 庫優化的批處理,而不是循環遍歷每個數據點。

在我原來的算法中,我做了以下事情:

for datapoint in datapoints:
  A = ... (created out of datapoint info)
  B = ... (created out of datapoint info)

  C = np.dot(A,B.transpose())
____________________

A: (7,1) numpy array
B: (6,1) numpy array
C: (7,6) numpy array

然后我將所述矩陣擴展為張量,其中第一個形狀索引將引用數據集。 如果我有 3 個數據集(為簡單起見),矩陣將如下所示:

A: (3,7,1) numpy array
B: (3,6,1) numpy array
C: (3,7,6) numpy array

僅使用 np.tensordot 或其他 numpy 操作,如何生成 C?

我假設答案看起來像這樣:

C = np.tensordot(A.[some manipulation], B.[some manipulation], axes = (...))

(這是一個更復雜的應用程序的一部分,我構建事物的方式不再靈活。如果我找不到解決方案,我只會遍歷數據集並為每個數據集執行乘法)

我們可以使用np.einsum -

c = np.einsum('ijk,ilm->ijl',a,b)

由於最后一個軸是 singleton,因此使用切片 arrays 可能會更好 -

c = np.einsum('ij,il->ijl',a[...,0],b[...,0])

使用np.matmul/@-operator -

c = a@b.swapaxes(1,2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM