
- NumPy 教程
- NumPy - 首頁
- NumPy - 簡介
- NumPy - 環境
- NumPy 陣列
- NumPy - Ndarray 物件
- NumPy - 資料型別
- NumPy 建立和運算元組
- NumPy - 陣列建立例程
- NumPy - 陣列操作
- NumPy - 從現有資料建立陣列
- NumPy - 從數值範圍建立陣列
- NumPy - 遍歷陣列
- NumPy - 陣列重塑
- NumPy - 陣列連線
- NumPy - 陣列堆疊
- NumPy - 陣列分割
- NumPy - 陣列扁平化
- NumPy - 陣列轉置
- NumPy 索引和切片
- NumPy - 索引和切片
- NumPy - 高階索引
- NumPy 陣列屬性和操作
- NumPy - 陣列屬性
- NumPy - 陣列形狀
- NumPy - 陣列大小
- NumPy - 陣列步長
- NumPy - 陣列元素大小
- NumPy - 廣播
- NumPy - 算術運算
- NumPy - 陣列加法
- NumPy - 陣列減法
- NumPy - 陣列乘法
- NumPy - 陣列除法
- NumPy 高階陣列操作
- NumPy - 交換陣列軸
- NumPy - 位元組交換
- NumPy - 複製和檢視
- NumPy - 元素級陣列比較
- NumPy - 陣列過濾
- NumPy - 陣列連線
- NumPy - 排序、搜尋和計數函式
- NumPy - 搜尋陣列
- NumPy - 陣列並集
- NumPy - 查詢唯一行
- NumPy - 建立日期時間陣列
- NumPy - 二元運算子
- NumPy - 字串函式
- NumPy - 數學函式
- NumPy - 統計函式
- NumPy - 矩陣庫
- NumPy - 線性代數
- NumPy - Matplotlib
- NumPy - 使用 Matplotlib 繪製直方圖
- NumPy - NumPy 的 I/O 操作
- NumPy 排序和高階操作
- NumPy - 陣列排序
- NumPy - 沿軸排序
- NumPy - 使用花式索引排序
- NumPy - 結構化陣列
- NumPy - 建立結構化陣列
- NumPy - 操作結構化陣列
- NumPy - 欄位訪問
- NumPy - 記錄陣列
- Numpy - 載入陣列
- Numpy - 儲存陣列
- NumPy - 向陣列追加值
- NumPy - 交換陣列列
- NumPy - 向陣列插入軸
- NumPy 處理缺失資料
- NumPy - 處理缺失資料
- NumPy - 識別缺失值
- NumPy - 刪除缺失資料
- NumPy - 估算缺失資料
- NumPy 效能最佳化
- NumPy - 使用陣列進行效能最佳化
- NumPy - 使用陣列進行向量化
- NumPy - 陣列的記憶體佈局
- Numpy 線性代數
- NumPy - 線性代數
- NumPy - 矩陣庫
- NumPy - 矩陣加法
- NumPy - 矩陣減法
- NumPy - 矩陣乘法
- NumPy - 元素級矩陣運算
- NumPy - 點積
- NumPy - 矩陣求逆
- NumPy - 行列式計算
- NumPy - 特徵值
- NumPy - 特徵向量
- NumPy - 奇異值分解
- NumPy - 求解線性方程組
- NumPy - 矩陣範數
- NumPy 元素級矩陣運算
- NumPy - 求和
- NumPy - 求平均值
- NumPy - 求中位數
- NumPy - 求最小值
- NumPy - 求最大值
- NumPy 集合操作
- NumPy - 唯一元素
- NumPy - 交集
- NumPy - 並集
- NumPy - 差集
- NumPy 有用資源
- NumPy 編譯器
- NumPy - 快速指南
- NumPy - 有用資源
- NumPy - 討論
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.]]
廣告