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

การหดตัวของเทนเซอร์ด้วยการรวมข้อตกลง Einstein (Einstein summation convention) ใน Python


ภาพรวม

ใช้ numpy.einsum() สำหรับ tensor contraction ตาม Einstein summation convention วิธีนี้ช่วยให้สามารถแสดงการดำเนินการอาร์เรย์หลายมิติและพีชคณิตเชิงเส้นได้อย่างเรียบง่าย

โหมดการทำงาน

  • Implicit mode: einsum คำนวณค่าอัตโนมัติตาม convention
  • Explicit mode: ระบุ subscript labels ชัดเจน เพื่อความยืดหยุ่นมากขึ้น

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

  1. นำเข้าไลบรารี
    import numpy as np
    
  2. สร้างอาร์เรย์ 3 มิติ สองชุด
    arr1 = np.arange(60.).reshape(3, 4, 5)
    arr2 = np.arange(24.).reshape(4, 3, 2)
    
  3. ตรวจสอบคุณสมบัติอาร์เรย์
    print("อาร์เรย์ 1...\n", arr1)
    print("\nอาร์เรย์ 2...\n", arr2)
    print("\nมิติอาร์เรย์ 1...\n", arr1.ndim)
    print("\nมิติอาร์เรย์ 2...\n", arr2.ndim)
    print("\nรูปร่างอาร์เรย์ 1...\n", arr1.shape)
    print("\nรูปร่างอาร์เรย์ 2...\n", arr2.shape)
    
  4. ทำ tensor contraction
    print("\nผลลัพธ์ (Tensor contraction)...\n", np.einsum('ijk,jil->kl', arr1, arr2))
    

ตัวอย่างโค้ดสมบูรณ์

import numpy as np

arr1 = np.arange(60.).reshape(3, 4, 5)
arr2 = np.arange(24.).reshape(4, 3, 2)

print("อาร์เรย์ 1...\n", arr1)
print("\nอาร์เรย์ 2...\n", arr2)
print("\nมิติของอาร์เรย์ 1...\n", arr1.ndim)
print("\nมิติของอาร์เรย์ 2...\n", arr2.ndim)
print("\nรูปร่างของอาร์เรย์ 1...\n", arr1.shape)
print("\nรูปร่างของอาร์เรย์ 2...\n", arr2.shape)

print("\nผลลัพธ์ (Tensor contraction)...\n", np.einsum('ijk,jil->kl', arr1, arr2))

ผลลัพธ์ที่คาดหวัง

อาร์เรย์ 1...
 [[[ 0.  1.  2.  3.  4.] ... ] ... ]
อาร์เรย์ 2...
 [[[ 0.  1.] [ 2.  3.] [ 4.  5.]] ... ]
มิติของอาร์เรย์ 1...
 3
มิติของอาร์เรย์ 2...
 3
รูปร่างของอาร์เรย์ 1...
 (3, 4, 5)
รูปร่างของอาร์เรย์ 2...
 (4, 3, 2)
ผลลัพธ์ (Tensor contraction)...
 [[4400. 4730.]
 [4532. 4874.]
 [4664. 5018.]
 [4796. 5162.]
 [4928. 5306.]]