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

การหาเทรซของเมทริกซ์ด้วยแบบข้อตกลงการบวกของไอน์สไตน์ใน Python


บทนำ

เมธอด 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