當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python dask.array.tensordot用法及代碼示例


用法:

dask.array.tensordot(lhs, rhs, axes=2)

沿指定軸計算張量點積。

此文檔字符串是從 numpy.tensordot 複製的。

可能存在與 Dask 版本的一些不一致之處。

給定兩個張量 ab 以及一個包含兩個類似數組的對象 (a_axes, b_axes) 的數組類似對象,將 ab 的元素(組件)的乘積相加,軸指定為a_axesb_axes 。第三個參數可以是單個非負 integer_like 標量 N ;如果是這樣,則將 a 的最後 N 維度和 b 的第一個 N 維度相加。

參數

a, barray_like

“dot” 的張量。

axesint 或 (2,) 數組
  • integer_like 如果是int N,則按順序對a的最後N個軸和b的前N個軸求和。相應軸的大小必須匹配。
  • (2,) 數組 或者,要匯總的軸列表,第一個序列應用於 a ,第二個應用於 b 。兩個元素 數組 必須具有相同的長度。

返回

outputndarray

輸入的張量點積。

注意

三個常見的用例是:
  • axes = 0 : 張量積
  • axes = 1 : 張量點積
  • axes = 2:(默認)張量雙收縮

axes為integer_like時,求值順序為:首先是a中的第-N軸和b中的第0軸,最後是a中的第-1軸和b中的第N軸.

當有多個軸要求和時 - 它們不是 a ( b ) 的最後(第一個)軸 - 參數 axes 應該由兩個相同長度的序列組成,第一個軸在兩個序列中對給定的第一個進行求和,第二個軸對第二個進行求和,依此類推。

結果的形狀由第一個張量的非收縮軸和第二個張量的非收縮軸組成。

例子

“traditional” 示例:

>>> a = np.arange(60.).reshape(3,4,5)  
>>> b = np.arange(24.).reshape(4,3,2)  
>>> c = np.tensordot(a,b, axes=([1,0],[0,1]))  
>>> c.shape  
(5, 2)
>>> c  
array([[4400., 4730.],
       [4532., 4874.],
       [4664., 5018.],
       [4796., 5162.],
       [4928., 5306.]])
>>> # A slower but equivalent way of computing the same...
>>> d = np.zeros((5,2))  
>>> for i in range(5):  
...   for j in range(2):
...     for k in range(3):
...       for n in range(4):
...         d[i,j] += a[k,n,i] * b[n,k,j]
>>> c == d  
array([[ True,  True],
       [ True,  True],
       [ True,  True],
       [ True,  True],
       [ True,  True]])

利用 + 和 * 重載的擴展示例:

>>> a = np.array(range(1, 9))  
>>> a.shape = (2, 2, 2)  
>>> A = np.array(('a', 'b', 'c', 'd'), dtype=object)  
>>> A.shape = (2, 2)  
>>> a; A  
array([[[1, 2],
        [3, 4]],
       [[5, 6],
        [7, 8]]])
array([['a', 'b'],
       ['c', 'd']], dtype=object)
>>> np.tensordot(a, A) # third argument default is 2 for double-contraction  
array(['abbcccdddd', 'aaaaabbbbbbcccccccdddddddd'], dtype=object)
>>> np.tensordot(a, A, 1)  
array([[['acc', 'bdd'],
        ['aaacccc', 'bbbdddd']],
       [['aaaaacccccc', 'bbbbbdddddd'],
        ['aaaaaaacccccccc', 'bbbbbbbdddddddd']]], dtype=object)
>>> np.tensordot(a, A, 0) # tensor product (result too long to incl.)  
array([[[[['a', 'b'],
          ['c', 'd']],
          ...
>>> np.tensordot(a, A, (0, 1))  
array([[['abbbbb', 'cddddd'],
        ['aabbbbbb', 'ccdddddd']],
       [['aaabbbbbbb', 'cccddddddd'],
        ['aaaabbbbbbbb', 'ccccdddddddd']]], dtype=object)
>>> np.tensordot(a, A, (2, 1))  
array([[['abb', 'cdd'],
        ['aaabbbb', 'cccdddd']],
       [['aaaaabbbbbb', 'cccccdddddd'],
        ['aaaaaaabbbbbbbb', 'cccccccdddddddd']]], dtype=object)
>>> np.tensordot(a, A, ((0, 1), (0, 1)))  
array(['abbbcccccddddddd', 'aabbbbccccccdddddddd'], dtype=object)
>>> np.tensordot(a, A, ((2, 1), (1, 0)))  
array(['acccbbdddd', 'aaaaacccccccbbbbbbdddddddd'], dtype=object)

相關用法


注:本文由純淨天空篩選整理自dask.org大神的英文原創作品 dask.array.tensordot。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。