NumPy - 特徵向量



什麼是特徵向量?

特徵向量是與矩陣相關聯的特殊向量,它提供有關矩陣屬性的資訊。

線上性代數的上下文中,如果A是一個方陣,則對應於特徵值λ的特徵向量v是一個非零向量,滿足以下等式:

Av = λv

這意味著當矩陣A乘以向量v時,結果與用標量λ乘以向量v相同。

在 NumPy 中計算特徵向量

NumPy 提供了numpy.linalg.eig()函式來計算方陣的特徵值和特徵向量。讓我們透過一個例子來看看這個函式是如何工作的。

示例

在這個例子中,矩陣A的特徵值是 3 和 2。相應的特徵向量顯示在輸出中:

import numpy as np

# Define a 2x2 matrix
A = np.array([[4, -2], 
              [1,  1]])

# Compute the eigenvalues and eigenvectors
eigenvalues, eigenvectors = np.linalg.eig(A)

print("Eigenvalues:", eigenvalues)
print("Eigenvectors:\n", eigenvectors)

numpy.linalg.eig()函式的輸出包含兩個陣列:一個用於特徵值,一個用於特徵向量。

特徵值陣列包含矩陣的特徵值,而特徵向量陣列的每一列都表示對應於相應特徵值的特徵向量:

Eigenvalues: [3. 2.]
Eigenvectors:
 [[ 0.89442719  0.70710678]
 [ 0.4472136  -0.70710678]]

特徵向量的性質

特徵向量具有幾個重要的性質,它們是:

  • 線性:對應於不同特徵值的特徵向量是線性無關的。
  • 可伸縮性:特徵向量的任何標量倍數也是對應於相同特徵值的特徵向量。
  • 不變性:特徵向量在由矩陣定義的線性變換下保持不變(最多一個標量倍數)。
  • 正交性:對於對稱矩陣,對應於不同特徵值的特徵向量是正交的。

特徵向量的應用

特徵向量有許多應用,它們是:

  • 主成分分析 (PCA):用於資料分析和機器學習中的降維。
  • 穩定性分析:用於控制理論中分析系統的穩定性。
  • 量子力學:用於求解薛定諤方程並找到系統的能級。
  • 振動分析:用於工程中分析結構的固有頻率。
  • 圖論:用於分析圖和網路的屬性。

示例:3x3 矩陣的特徵向量

在下面的示例中,我們使用 NumPy 計算 3x3 矩陣的特徵值和特徵向量:

import numpy as np

# Define a 3x3 matrix
B = np.array([[1, 2, 3],
              [0, 1, 4],
              [5, 6, 0]])

# Compute the eigenvalues and eigenvectors
eigenvalues, eigenvectors = np.linalg.eig(B)

print("Eigenvalues:", eigenvalues)
print("Eigenvectors:\n", eigenvectors)

這將產生以下結果:

Eigenvalues: [-5.2296696  -0.02635282  7.25602242]
Eigenvectors:
[[ 0.22578016 -0.75769839 -0.49927017]
 [ 0.52634845  0.63212771 -0.46674201]
 [-0.81974424 -0.16219652 -0.72998712]]

對稱矩陣和實特徵向量

對稱矩陣是指等於其轉置的矩陣(即,A = AT)。對稱矩陣在特徵值和特徵向量方面具有一些特殊的性質:

  • 實特徵值:對稱矩陣的特徵值始終是實數。
  • 正交特徵向量:對稱矩陣對應於不同特徵值的特徵向量是正交的。

示例

讓我們計算一個對稱矩陣的特徵值和特徵向量:

import numpy as np

# Define a symmetric matrix
C = np.array([[4, 1, 1],
              [1, 4, 1],
              [1, 1, 4]])

# Compute the eigenvalues and eigenvectors
eigenvalues, eigenvectors = np.linalg.eig(C)

print("Eigenvalues:", eigenvalues)
print("Eigenvectors:\n", eigenvectors)

以下是上述程式碼的輸出:

Eigenvalues: [6. 3. 3.]
Eigenvectors:
[[-0.57735027 -0.81649658 -0.15430335]
 [-0.57735027  0.40824829 -0.6172134 ]
 [-0.57735027  0.40824829  0.77151675]]

特徵向量和對角化

如果方陣A可以寫成以下形式,則稱其為可對角化的:

A = PDP-1

其中,D是一個包含A的特徵值的對角矩陣,P是一個其列是A的特徵向量的矩陣。

示例

讓我們看看如何使用 NumPy 對角化矩陣:

import numpy as np

# Define a matrix
D = np.array([[2, 0, 0],
              [1, 3, 0],
              [4, 5, 6]])

# Compute the eigenvalues and eigenvectors
eigenvalues, eigenvectors = np.linalg.eig(D)

# Diagonal matrix of eigenvalues
D_diag = np.diag(eigenvalues)

# Reconstruct the original matrix
reconstructed_D = eigenvectors @ D_diag @ np.linalg.inv(eigenvectors)

print("Original matrix:\n", D)
print("Reconstructed matrix:\n", reconstructed_D)

使用其特徵值和特徵向量成功地重建了原始矩陣,演示了對角化過程:

Original matrix:
 [[2 0 0]
 [1 3 0]
 [4 5 6]]
Reconstructed matrix:
 [[2. 0. 0.]
 [1. 3. 0.]
 [4. 5. 6.]]
廣告