scipy.sparse.coo_array.
tensordot#
- coo_array.tensordot(other, axes=2)[原始碼]#
傳回與另一個陣列沿給定軸的 tensordot 乘積。
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]])