परिचय
पायथन में आइंस्टीन सममिति (einsum) अभिव्यक्ति के लिए न्यूनतम लागत संकुचन क्रम प्राप्त करने के लिए, numpy.einsum_path() विधि का उपयोग करें। यह विधि इष्टतम संकुचन पथ लौटाती है जो गणना लागत को कम करता है।
पैरामीटर्स
- subscripts: सममिति के लिए सबस्क्रिप्ट निर्दिष्ट करता है।
- operands: संक्रिया के लिए सरणियाँ।
- optimize: अनुकूलन रणनीति ('greedy', 'optimal', आदि)।
चरण-दर-चरण उदाहरण
आवश्यक लाइब्रेरी आयात करें
import numpy as np
टेंसर बनाएं
p = np.random.rand(2, 2)
q = np.random.rand(2, 5)
r = np.random.rand(5, 2)
न्यूनतम लागत संकुचन क्रम प्राप्त करें
path_info = np.einsum_path('ij,jk,kl->il', p, q, r, optimize='greedy')
पथ जानकारी प्रदर्शित करें
print(path_info[0]) # संकुचन क्रम
print(path_info[1]) # विस्तृत पथ जानकारी
पूर्ण कोड उदाहरण
import numpy as np
np.random.seed(123) # पुनरुत्पादन के लिए
# टेंसर बनाएं
p = np.random.rand(2, 2)
q = np.random.rand(2, 5)
r = np.random.rand(5, 2)
# न्यूनतम लागत संकुचन क्रम प्राप्त करें
path_info = np.einsum_path('ij,jk,kl->il', p, q, r, optimize='greedy')
# पथ जानकारी प्रदर्शित करें
print(path_info[0])
print(path_info[1])
आउटपुट
['einsum_path', (1, 2), (0, 1)]
Complete contraction: ij,jk,kl->il
Naive scaling: 4
Optimized scaling: 3
Naive FLOP count: 1.200e+02
Optimized FLOP count: 5.700e+01
Theoretical speedup: 2.105
Largest intermediate: 4.000e+00 elements
--------------------------------------------------------------------------
scaling current remaining
--------------------------------------------------------------------------
3 kl,jk->jl ij,jl->il
3 jl,ij->il il->il
व्याख्या: आउटपुट दर्शाता है कि इष्टतम क्रम पहले q और r (सूचकांक 1,2) को संकुचित करना है, फिर परिणाम को p (सूचकांक 0) के साथ संकुचित करना है। इससे FLOP काउंट 120 से घटकर 57 हो जाता है (2.1× तेज़)।