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

ประเมินลำดับการย่อต้นทุนต่ำสุดสำหรับนิพจน์ einsum ใน Python


ในการรับคำสั่งการย่อราคาต่ำสุดสำหรับนิพจน์ 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