本文簡要介紹 python 語言中 numpy.linalg.eig
的用法。
用法:
linalg.eig(a)
計算方陣的特征值和右特征向量。
- a: (…, M, M) 數組
將計算特征值和右特征向量的矩陣
- w: (…, M) 數組
特征值,每個都根據其多重性重複。特征值不一定是有序的。結果數組將是複數類型,除非虛部為零,在這種情況下它將被強製轉換為實數類型。當 a 為實數時,得到的特征值將是實數(0 虛部)或以共軛對形式出現
- v: (…, M, M) 數組
歸一化(單元“length”)特征向量,使得列
v[:,i]
是對應於特征值w[i]
的特征向量。
- LinAlgError
如果特征值計算不收斂。
參數:
返回:
拋出:
注意:
廣播規則適用,有關詳細信息,請參閱
numpy.linalg
文檔。這是使用
_geev
LAPACK 例程來實現的,該例程計算一般方陣的特征值和特征向量。號碼w是一個特征值a如果存在向量v這樣
a @ v = w * v
.因此,數組a,w, 和v滿足方程a @ v[:,i] = w[i] * v[:,i]
為了 .數組v的特征向量可能不是最大秩,也就是說,一些列可能是線性相關的,盡管舍入誤差可能會掩蓋這一事實。如果特征值都不同,那麽理論上特征向量是線性獨立的,並且a可以通過使用相似變換對角化v, IE,
inv(v) @ a @ v
是對角線。對於非 Hermitian 正規矩陣,SciPy 函數
scipy.linalg.schur
是首選,因為矩陣v保證是幺正的,使用的時候不是這樣eig
. Schur 分解產生上三角矩陣而不是對角矩陣,但對於正規矩陣,隻需要上三角矩陣的對角線,其餘的是舍入誤差。最後要強調的是v由正確的(如右側)的特征向量a.一個向量y令人滿意的
y.T @ a = z * y.T
對於一些數字z被稱為剩下的特征向量a,並且,一般來說,矩陣的左右特征向量不一定是彼此的(可能是共軛的)轉置。參考:
G. Strang,線性代數及其應用,第 2 版,佛羅裏達州奧蘭多,學術出版社,1980 年,各種 pp。
例子:
>>> from numpy import linalg as LA
(幾乎)真實的e-values和e-vectors的簡單例子。
>>> w, v = LA.eig(np.diag((1, 2, 3))) >>> w; v array([1., 2., 3.]) array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]])
具有複數e-values和e-vectors的實矩陣;請注意,e-values 是彼此的複共軛。
>>> w, v = LA.eig(np.array([[1, -1], [1, 1]])) >>> w; v array([1.+1.j, 1.-1.j]) array([[0.70710678+0.j , 0.70710678-0.j ], [0. -0.70710678j, 0. +0.70710678j]])
Complex-valued 矩陣與實數 e-values(但 complex-valued e-vectors);注意
a.conj().T == a
, IE。,a是厄米特。>>> a = np.array([[1, 1j], [-1j, 1]]) >>> w, v = LA.eig(a) >>> w; v array([2.+0.j, 0.+0.j]) array([[ 0. +0.70710678j, 0.70710678+0.j ], # may vary [ 0.70710678+0.j , -0. +0.70710678j]])
小心舍入錯誤!
>>> a = np.array([[1 + 1e-9, 0], [0, 1 - 1e-9]]) >>> # Theor. e-values are 1 +/- 1e-9 >>> w, v = LA.eig(a) >>> w; v array([1., 1.]) array([[1., 0.], [0., 1.]])
相關用法
- Python numpy linalg.eigh用法及代碼示例
- Python numpy linalg.eigvals用法及代碼示例
- Python numpy linalg.eigvalsh用法及代碼示例
- Python numpy linalg.svd用法及代碼示例
- Python numpy linalg.pinv用法及代碼示例
- Python numpy linalg.tensorinv用法及代碼示例
- Python numpy linalg.LinAlgError用法及代碼示例
- Python numpy linalg.matrix_rank用法及代碼示例
- Python numpy linalg.solve用法及代碼示例
- Python numpy linalg.det用法及代碼示例
- Python numpy linalg.cond用法及代碼示例
- Python numpy linalg.inv用法及代碼示例
- Python numpy linalg.lstsq用法及代碼示例
- Python numpy linalg.norm用法及代碼示例
- Python numpy linalg.slogdet用法及代碼示例
- Python numpy linalg.multi_dot用法及代碼示例
- Python numpy linalg.tensorsolve用法及代碼示例
- Python numpy linalg.qr用法及代碼示例
- Python numpy linalg.matrix_power用法及代碼示例
- Python numpy linalg.cholesky用法及代碼示例
- Python numpy linspace用法及代碼示例
- Python numpy lib.NumpyVersion用法及代碼示例
- Python numpy lib.Arrayterator用法及代碼示例
- Python numpy legendre.legint用法及代碼示例
- Python numpy laguerre.lagone用法及代碼示例
注:本文由純淨天空篩選整理自numpy.org大神的英文原創作品 numpy.linalg.eig。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。