本文簡要介紹 python 語言中 numpy.einsum_path
的用法。
用法:
numpy.einsum_path(subscripts, *operands, optimize='greedy')
通過考慮中間數組的創建來評估 einsum 表達式的最低成本收縮順序。
- subscripts: str
指定求和的下標。
- *operands: 數組 列表
這些是操作的數組。
- optimize: {布爾,列表,元組,‘greedy’, ‘optimal’}
選擇路徑類型。如果提供了元組,則假定第二個參數是創建的最大中間大小。如果僅提供一個參數,則最大輸入或輸出數組大小用作最大中間大小。
如果給出一個以
einsum_path
開頭的列表,則使用它作為收縮路徑如果 False 不進行優化
如果 True 默認為 ‘greedy’ 算法
‘optimal’ 一種算法,它組合探索所有可能的收縮列出張量的方法並選擇成本最低的路徑。與收縮中的項數成 index 關係。
‘greedy’ 在每一步選擇最佳對收縮的算法。實際上,該算法在每一步搜索最大的內積、Hadamard 積,然後是外積。隨收縮中的項數立方縮放。相當於大多數宮縮的‘optimal’ 路徑。
默認為‘greedy’。
- path: 元組列表
einsum 路徑的列表表示。
- string_repr: str
einsum 路徑的可打印表示。
參數:
返回:
注意:
生成的路徑指示應首先收縮輸入收縮的哪些術語,然後將此收縮的結果附加到收縮列表的末尾。然後可以迭代此列表,直到完成所有中間收縮。
例子:
我們可以從一個鏈點示例開始。在這種情況下,最好首先收縮
b
和c
張量,如路徑(1, 2)
的第一個元素所表示的那樣。將得到的張量添加到收縮的末尾,然後完成剩餘的收縮(0, 1)
。>>> np.random.seed(123) >>> a = np.random.rand(2, 2) >>> b = np.random.rand(2, 5) >>> c = np.random.rand(5, 2) >>> path_info = np.einsum_path('ij,jk,kl->il', a, b, c, optimize='greedy') >>> print(path_info[0]) ['einsum_path', (1, 2), (0, 1)] >>> print(path_info[1]) Complete contraction: ij,jk,kl->il # may vary Naive scaling: 4 Optimized scaling: 3 Naive FLOP count: 1.600e+02 Optimized FLOP count: 5.600e+01 Theoretical speedup: 2.857 Largest intermediate: 4.000e+00 elements ------------------------------------------------------------------------- scaling current remaining ------------------------------------------------------------------------- 3 kl,jk->jl ij,jl->il 3 jl,ij->il il->il
一個更複雜的索引轉換示例。
>>> I = np.random.rand(10, 10, 10, 10) >>> C = np.random.rand(10, 10) >>> path_info = np.einsum_path('ea,fb,abcd,gc,hd->efgh', C, C, I, C, C, ... optimize='greedy')
>>> print(path_info[0]) ['einsum_path', (0, 2), (0, 3), (0, 2), (0, 1)] >>> print(path_info[1]) Complete contraction: ea,fb,abcd,gc,hd->efgh # may vary Naive scaling: 8 Optimized scaling: 5 Naive FLOP count: 8.000e+08 Optimized FLOP count: 8.000e+05 Theoretical speedup: 1000.000 Largest intermediate: 1.000e+04 elements -------------------------------------------------------------------------- scaling current remaining -------------------------------------------------------------------------- 5 abcd,ea->bcde fb,gc,hd,bcde->efgh 5 bcde,fb->cdef gc,hd,cdef->efgh 5 cdef,gc->defg hd,defg->efgh 5 defg,hd->efgh efgh->efgh
相關用法
- Python numpy einsum用法及代碼示例
- Python numpy extract用法及代碼示例
- Python numpy equal用法及代碼示例
- Python numpy eye用法及代碼示例
- Python numpy errstate用法及代碼示例
- Python numpy expand_dims用法及代碼示例
- Python numpy exp2用法及代碼示例
- Python numpy exp用法及代碼示例
- Python numpy expm1用法及代碼示例
- Python numpy ediff1d用法及代碼示例
- Python numpy empty用法及代碼示例
- Python numpy empty_like用法及代碼示例
- Python numpy RandomState.standard_exponential用法及代碼示例
- Python numpy hamming用法及代碼示例
- Python numpy legendre.legint用法及代碼示例
- Python numpy chararray.ndim用法及代碼示例
- Python numpy chebyshev.chebsub用法及代碼示例
- Python numpy chararray.nbytes用法及代碼示例
- Python numpy ma.indices用法及代碼示例
- Python numpy matrix.A1用法及代碼示例
- Python numpy MaskedArray.var用法及代碼示例
- Python numpy ma.zeros用法及代碼示例
- Python numpy broadcast用法及代碼示例
- Python numpy matrix.T用法及代碼示例
- Python numpy matrix.I用法及代碼示例
注:本文由純淨天空篩選整理自numpy.org大神的英文原創作品 numpy.einsum_path。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。