scipy.sparse.coo_matrix.
tensordot#
- coo_matrix.tensordot(other, axes=2)[原始碼]#
回傳此張量與另一個陣列沿給定軸的張量點積。
tensordot
與dot
和matmul
的不同之處在於,前者可以為第一個和第二個陣列選擇任何軸,並且計算乘積的總和,就像矩陣乘法一樣,但不僅僅是第一個矩陣的列乘以第二個矩陣的行。 它取得沿指定軸的向量集合的點積。 在這裡,如果需要,我們甚至可以取得沿兩個或更多軸的乘積總和。 因此,tensordot
是應用於任何維度 >= 1 的陣列的點積計算。 它類似於matmul
,但適用於每個矩陣的任意軸。給定兩個張量 a 和 b,以及所需的軸,指定為包含兩個軸編號序列的 2 元組/列表/陣列
(a_axes, b_axes)
,將 a 和 b 的元素(分量)在a_axes
和b_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。 序列長度必須相同。 a 和 b 之間對應軸的形狀必須匹配。
- 回傳值:
- outputcoo_array
此陣列與 other 的張量點積。 如果 other 是密集/稀疏的,則結果將是密集/稀疏的。
參見
範例
>>> 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]])