scipy.sparse.coo_matrix.

tensordot#

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

回傳此張量與另一個陣列沿給定軸的張量點積。

tensordotdotmatmul 的不同之處在於,前者可以為第一個和第二個陣列選擇任何軸,並且計算乘積的總和,就像矩陣乘法一樣,但不僅僅是第一個矩陣的列乘以第二個矩陣的行。 它取得沿指定軸的向量集合的點積。 在這裡,如果需要,我們甚至可以取得沿兩個或更多軸的乘積總和。 因此,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]])