আইনস্টাইন সমেশন কন্ট্রাকশন পাথ অপ্টিমাইজেশন
numpy.einsum_path() ফাংশন একটি আইনস্টাইন সমেশন এক্সপ্রেশনের জন্য সর্বনিম্ন কম্পিউটেশনাল খরচের কন্ট্রাকশন অর্ডার (path) বের করে। এটি বড় টেনসর কন্ট্রাকশনে পারফরম্যান্স বাড়াতে সাহায্য করে।
- subscripts: সাবস্ক্রিপ্ট লেবেল (যেমন 'ij,jk,kl->il')।
- operands: ইনপুট অ্যারেগুলো।
- optimize: অপ্টিমাইজেশন কৌশল (যেমন 'greedy', 'optimal')।
উদাহরণ কোড
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)
# Greedy অপ্টিমাইজেশন দিয়ে পাথ বের করা
path_info = np.einsum_path('ij,jk,kl->il', p, q, r, optimize='greedy')
print("Path:", path_info[0])
print("\nDetails:\n", path_info[1])
আউটপুট
Path: ['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