บทนำ
เมธอด einsum() ใช้ประเมินแบบข้อตกลงการบวกของไอน์สไตน์ (Einstein summation convention) บนออเปอแรนด์ ด้วยแบบข้อตกลงนี้ การดำเนินการอาร์เรย์หลายมิติและพีชคณิตเชิงเส้นทั่วไปหลายอย่างสามารถแสดงในรูปแบบที่เรียบง่ายได้ ในโหมดโดยนัย (implicit mode) einsum จะคำนวณค่าเหล่านี้โดยอัตโนมัติ
ในโหมดแสดงชัด (explicit mode) einsum ให้ความยืดหยุ่นเพิ่มเติมในการคำนวณการดำเนินการอาร์เรย์อื่นๆ ที่อาจไม่ถือเป็นการดำเนินการแบบข้อตกลงการบวกของไอน์สไตน์คลาสสิก โดยการปิดใช้งานหรือบังคับให้บวกกิ่งสับสคริปต์ (subscript labels) ที่ระบุ เพื่อหาเทรซ (trace) ของเมทริกซ์ด้วยแบบข้อตกลงการบวกของไอน์สไตน์ ให้ใช้เมธอด numpy.einsum() ใน Python พารามิเตอร์แรกคือสคริปต์ (subscript) ระบุสคริปต์สำหรับการบวกเป็นรายการที่คั่นด้วยจุลภาค พารามิเตอร์ที่สองคือออเปอแรนด์ คืออาร์เรย์สำหรับการดำเนินการ
ขั้นตอน
ขั้นแรก ให้นำเข้าไลบรารีที่จำเป็น:
import numpy as np
สร้างอาร์เรย์ NumPy โดยใช้เมธอด arange() และ reshape():
arr = np.arange(16).reshape(4, 4)
แสดงอาร์เรย์:
print("อาร์เรย์ของเรา...\n", arr)
ตรวจสอบมิติ:
print("\nมิติของอาร์เรย์...\n", arr.ndim)
ดูชนิดข้อมูล:
print("\nชนิดข้อมูลของออบเจกต์อาร์เรย์...\n", arr.dtype)
ดูรูปร่าง (shape):
print("\nรูปร่างของออบเจกต์อาร์เรย์...\n", arr.shape)
เพื่อหาเทรซของเมทริกซ์ด้วยแบบข้อตกลงการบวกของไอน์สไตน์ ให้ใช้เมธอด numpy.einsum() ใน Python:
print("\nผลลัพธ์ (เทรซ)...\n", np.einsum('ii', arr))
ตัวอย่างโค้ดสมบูรณ์
import numpy as np
# สร้างอาร์เรย์ NumPy โดยใช้เมธอด arange() และ reshape()
arr = np.arange(16).reshape(4, 4)
# แสดงอาร์เรย์
print("อาร์เรย์ของเรา...\n", arr)
# ตรวจสอบมิติ
print("\nมิติของอาร์เรย์...\n", arr.ndim)
# ดูชนิดข้อมูล
print("\nชนิดข้อมูลของออบเจกต์อาร์เรย์...\n", arr.dtype)
# ดูรูปร่าง
print("\nรูปร่างของออบเจกต์อาร์เรย์...\n", arr.shape)
# เพื่อหาเทรซของเมทริกซ์ด้วยแบบข้อตกลงการบวกของไอน์สไตน์ ใช้ numpy.einsum() ใน Python
print("\nผลลัพธ์ (เทรซ)...\n", np.einsum('ii', arr))
ผลลัพธ์
อาร์เรย์ของเรา... [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15]] มิติของอาร์เรย์... 2 ชนิดข้อมูลของออบเจกต์อาร์เรย์... int64 รูปร่างของออบเจกต์อาร์เรย์... (4, 4) ผลลัพธ์ (เทรซ)... 30