Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การประเมินลำดับการหดตัว (contraction order) ที่มีค่าใช้จ่ายต่ำสุดสำหรับนิพจน์ einsum ใน Python


ภาพรวม

ใช้ numpy.einsum_path() เพื่อหาลำดับการหดตัวที่มีค่าใช้จ่ายต่ำสุด (lowest cost contraction order) สำหรับนิพจน์ einsum ช่วยเพิ่มประสิทธิภาพการคำนวณ tensor contraction

พารามิเตอร์

  • subscripts: ระบุ subscripts สำหรับการรวมผลรวม
  • operands: อาร์เรย์สำหรับการดำเนินการ
  • optimize: กลยุทธ์การเพิ่มประสิทธิภาพ เช่น 'greedy'

ขั้นตอนการทำงาน

  1. นำเข้าไลบรารี
    import numpy as np
    
  2. สร้างเทนเซอร์
    p = np.random.rand(2, 2)
    q = np.random.rand(2, 5)
    r = np.random.rand(5, 2)
    
  3. หา contraction path ที่เหมาะสมที่สุด
    path_info = np.einsum_path('ij,jk,kl->il', p, q, r, optimize='greedy')
    
  4. แสดงข้อมูล path
    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