ภาพรวม
ใช้ numpy.einsum() สำหรับ tensor contraction ตาม Einstein summation convention วิธีนี้ช่วยให้สามารถแสดงการดำเนินการอาร์เรย์หลายมิติและพีชคณิตเชิงเส้นได้อย่างเรียบง่าย
โหมดการทำงาน
- Implicit mode: einsum คำนวณค่าอัตโนมัติตาม convention
- Explicit mode: ระบุ subscript labels ชัดเจน เพื่อความยืดหยุ่นมากขึ้น
ขั้นตอนการทำงาน
- นำเข้าไลบรารี
import numpy as np - สร้างอาร์เรย์ 3 มิติ สองชุด
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) - ทำ 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.]]