scipy.sparse.coo_array.

tensordot#

coo_array.tensordot(other, axes=2)[原始碼]#

傳回與另一個陣列沿給定軸的 tensordot 乘積。

tensordot 與 dot 和 matmul 的不同之處在於,可以為第一個和第二個陣列選擇任何軸,並且計算乘積的總和,就像矩陣乘法一樣,只是不只是第一個的列乘以第二個的行。它取沿指定軸的向量集合的點積。在這裡,如果需要,我們甚至可以取沿兩個甚至更多軸的乘積之和。因此,tensordot 是應用於任何維度 >= 1 的陣列的點積計算。它類似於 matmul,但適用於每個矩陣的任意軸。

給定兩個張量 ab,以及所需的軸指定為包含兩個軸編號序列的 2 元組/列表/陣列 (a_axes, b_axes),將 ab 的元素(分量)在 a_axesb_axes 指定的軸上求和。axes 輸入可以是單個非負整數 N;如果是,則 a 的最後 N 個維度和 b 的前 N 個維度將被求和。

參數:
a, barray_like

要進行「點積」的張量。

axesint 或 (2,) array_like
  • integer_like 如果是整數 N,則依序對 a 的最後 N 個軸和 b 的前 N 個軸求和。對應軸的大小必須匹配。

  • (2,) array_like 要在其上求和的軸的序列的 2 元組,第一個應用於 a,第二個應用於 b。序列的長度必須相同。ab 之間對應軸的形狀必須匹配。

回傳:
outputcoo_array

此陣列與 other 的張量點積。如果 other 是密集/稀疏的,則它將是密集/稀疏的。

另請參閱

dot

範例

>>> import numpy as np
>>> import scipy.sparse
>>> A = scipy.sparse.coo_array([[[2, 3], [0, 0]], [[0, 1], [0, 5]]])
>>> A.shape
(2, 2, 2)

整數軸 N 是 (range(-N, 0), range(0, N)) 的簡寫

>>> A.tensordot(A, axes=1).toarray()
array([[[[ 4,  9],
         [ 0, 15]],

        [[ 0,  0],
         [ 0,  0]]],


       [[[ 0,  1],
         [ 0,  5]],

        [[ 0,  5],
         [ 0, 25]]]])
>>> A.tensordot(A, axes=2).toarray()
array([[ 4,  6],
       [ 0, 25]])
>>> A.tensordot(A, axes=3)
array(39)

使用元組作為軸

>>> a = scipy.sparse.coo_array(np.arange(60).reshape(3,4,5))
>>> b = np.arange(24).reshape(4,3,2)
>>> c = a.tensordot(b, axes=([1,0],[0,1]))
>>> c.shape
(5, 2)
>>> c
array([[4400, 4730],
       [4532, 4874],
       [4664, 5018],
       [4796, 5162],
       [4928, 5306]])