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

การคำนวณ Eigenvalues และ Eigenvectors ของเมทริกซ์ด้วย SciPy ใน Python

Eigenvalues (ค่าเฉพาะ) และ Eigenvectors (เวกเตอร์เฉพาะ) สำคัญใน Linear Algebra ใช้ใน PCA, Spectral Clustering, Vibration Analysis, Quantum Mechanics ฯลฯ

สำหรับ Square Matrix A: A·v = λ·v โดย λ = Eigenvalue, v = Eigenvector

SciPy มีฟังก์ชัน scipy.linalg.eig() คำนวณทั้งคู่พร้อมกัน

ไวยากรณ์

scipy.linalg.eig(matrix)

ตัวอย่างโค้ด


from scipy import linalg
import numpy as np

my_arr = np.array([[5, 7], [11, 3]])
eg_val, eg_vect = linalg.eig(my_arr)

print("The Eigenvalues are :")
print(eg_val)
print("The Eigenvectors are :")
print(eg_vect)

ผลลัพธ์


The Eigenvalues are : [12.83176087+0.j -4.83176087+0.j]
The Eigenvectors are : [[ 0.66640536 -0.57999285]
 [ 0.74558963  0.81462157]]

คำอธิบาย

  • นำเข้า scipy.linalg และ numpy

  • สร้างเมทริกซ์ 2x2 ด้วย NumPy

  • เรียก linalg.eig() คืนค่า (eigenvalues, eigenvectors)

  • eigenvalues เป็น Complex Numbers (ส่วนจินตภาพเป็น 0 สำหรับเมทริกซ์สมมาตร)

  • eigenvectors แต่ละคอลัมน์ตรงกับ eigenvalue ตัวเดียวกัน

ฟังก์ชันเกี่ยวข้องใน scipy.linalg

ฟังก์ชันคำอธิบาย
eig()General Eigenvalues/Eigenvectors
eigh()สำหรับ Hermitian/Symmetric Matrix (เร็วกว่า, ผลลัพธ์ Real)
eigvals()คืนค่าเฉพาะ Eigenvalues อย่างเดียว
eigvalsh()Eigenvalues สำหรับ Symmetric Matrix

การตรวจสอบผลลัพธ์


# ตรวจสอบ: A * v ≈ λ * v
A = my_arr
for i in range(len(eg_val)):
    lambda_i = eg_val[i]
    v_i = eg_vect[:, i]
    print(f"λ={lambda_i:.4f}: A@v = {A @ v_i}, λ*v = {lambda_i * v_i}")

ประยุกต์ใช้: PCA (Principal Component Analysis) ใช้ Eigenvectors ของ Covariance Matrix เป็น Principal Components