ในการรับคำสั่งการย่อราคาต่ำสุดสำหรับนิพจน์ einsum ให้ใช้เมธอด numpy.einsum+path() ใน Python พารามิเตอร์ตัวที่ 1 ตัวห้อยระบุตัวห้อยสำหรับการบวก พารามิเตอร์ที่ 2 ตัวถูกดำเนินการคืออาร์เรย์สำหรับการดำเนินการ
การใช้แบบแผนการบวกของไอน์สไตน์ ทำให้การดำเนินการอาร์เรย์เกี่ยวกับพีชคณิตเชิงเส้นหลายมิติทั่วไปหลายๆ อย่างสามารถแสดงในรูปแบบที่เรียบง่ายได้ ในโหมดโดยนัย einsum จะคำนวณค่าเหล่านี้
ในโหมดที่ชัดเจน einsum ให้ความยืดหยุ่นเพิ่มเติมในการคำนวณการดำเนินการอาร์เรย์อื่นๆ ที่อาจไม่ได้รับการพิจารณาว่าเป็นการดำเนินการรวมของ Einstein แบบคลาสสิก โดยการปิดใช้งาน หรือบังคับให้การรวมเกินป้ายกำกับตัวห้อย
เส้นทางที่เป็นผลลัพธ์ระบุว่าเงื่อนไขของการหดตัวอินพุตใดควรทำสัญญาก่อน จากนั้นจึงนำการย่อนี้มาต่อท้ายรายการการหดตัว รายการนี้จะถูกตอกย้ำจนกว่าการหดตัวระดับกลางทั้งหมดจะเสร็จสมบูรณ์
ขั้นตอน
ขั้นแรก นำเข้าไลบรารีที่จำเป็น -
import numpy as np
เทนเซอร์ -
p = np.random.rand(2, 2) q = np.random.rand(2, 5) r = np.random.rand(5, 2)
เพื่อให้ได้ลำดับการย่อต้นทุนต่ำสุดสำหรับนิพจน์ einsum ให้ใช้เมธอด numpy.einsum+path() -
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) # Tensors p = np.random.rand(2, 2) q = np.random.rand(2, 5) r = np.random.rand(5, 2) # To get the lowest cost contraction order for an einsum expression, use the numpy.einsum+path() method in Python path_info = np.einsum_path('ij,jk,kl->il', p, q, r, optimize='greedy') # Displaying Path info 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