本文簡要介紹 python 語言中 scipy.sparse.linalg.eigs
的用法。
用法:
scipy.sparse.linalg.eigs(A, k=6, M=None, sigma=None, which='LM', v0=None, ncv=None, maxiter=None, tol=0, return_eigenvectors=True, Minv=None, OPinv=None, OPpart=None)#
求方陣 A 的 k 個特征值和特征向量。
解決
A @ x[i] = w[i] * x[i]
,即 w[i] 特征值與相應特征向量 x[i] 的標準特征值問題。如果指定了 M,則求解
A @ x[i] = w[i] * M @ x[i]
,即 w[i] 特征值與相應特征向量 x[i] 的廣義特征值問題- A: ndarray,稀疏矩陣或LinearOperator
表示操作
A @ x
的數組、稀疏矩陣或 LinearOperator,其中 A 是實數或複數方陣。- k: 整數,可選
所需的特征值和特征向量的數量。 k 必須小於 N-1。不可能計算矩陣的所有特征向量。
- M: ndarray,稀疏矩陣或 LinearOperator,可選
表示廣義特征值問題的操作 M@x 的數組、稀疏矩陣或 LinearOperator
A @ x = w * M @ x.
如果 A 是實數,則 M 必須表示一個實對稱矩陣,如果 A 是複數,則 M 必須表示一個複數 Hermitian 矩陣。為獲得最佳結果,M 的數據類型應與 A 的數據類型相同。另外:
If sigma is None, M is positive definite
If sigma is specified, M is positive semi-definite
如果 sigma 為 None,則 eigs 需要一個運算符來計算線性方程
M @ x = b
的解。這是通過對顯式矩陣 M 的(稀疏)LU 分解或通過對一般線性算子的迭代求解器在內部完成的。或者,用戶可以提供矩陣或運算符 Minv,它給出x = Minv @ b = M^-1 @ b
。- sigma: 實數或複數,可選
使用 shift-invert 模式查找 sigma 附近的特征值。這需要一個運算符來計算線性係統
[A - sigma * M] @ x = b
的解,其中 M 是單位矩陣(如果未指定)。這是通過顯式矩陣 A 和 M 的(稀疏)LU 分解在內部計算的,或者如果 A 或 M 是一般線性運算符,則通過迭代求解器進行內部計算。或者,用戶可以提供矩陣或運算符 OPinv,它給出x = OPinv @ b = [A - sigma * M]^-1 @ b
。對於實數矩陣 A,shift-invert 可以在虛數模式或實數模式下完成,由參數 OPpart(‘r’ 或 ‘i’)指定。請注意,當指定 sigma 時,關鍵字 ‘which’(如下)指的是移位的特征值w'[i]
,其中:- If A is real and OPpart == ‘r’ (default),
w'[i] = 1/2 * [1/(w[i]-sigma) + 1/(w[i]-conj(sigma))]
.- If A is real and OPpart == ‘i’,
w'[i] = 1/2i * [1/(w[i]-sigma) - 1/(w[i]-conj(sigma))]
.
If A is complex,
w'[i] = 1/(w[i]-sigma)
.- v0: ndarray,可選
迭代的起始向量。默認值:隨機
- ncv: 整數,可選
生成的 Lanczos 向量的數量數控車床必須大於k;建議
ncv > 2*k
.默認:min(n, max(2*k + 1, 20))
- which: str, ['LM' | 'SM' | 'LR' | 'SR' | ‘李’ | ‘SI’],可選
要找到哪些 k 個特征向量和特征值:
‘LM’ : largest magnitude
‘SM’ : smallest magnitude
‘LR’ : largest real part
‘SR’ : smallest real part
‘LI’ : largest imaginary part
‘SI’ : smallest imaginary part
當 sigma != None 時,‘which’ 指的是移位的特征值 w'[i](參見上文 ‘sigma’ 中的討論)。 ARPACK 通常比小值更擅長查找大值。如果需要小特征值,請考慮使用shift-invert 模式以獲得更好的性能。
- maxiter: 整數,可選
允許的最大 Arnoldi 更新迭代次數默認值:
n*10
- tol: 浮點數,可選
特征值的相對精度(停止標準) 默認值 0 表示機器精度。
- return_eigenvectors: 布爾型,可選
除了特征值之外,還返回特征向量 (True)
- Minv: ndarray,稀疏矩陣或 LinearOperator,可選
見上文 M 中的注釋。
- OPinv: ndarray,稀疏矩陣或 LinearOperator,可選
請參見上文 sigma 中的注釋。
- OPpart: {‘r’ 或 ‘i’},可選
請參閱上麵的 sigma 中的注釋
- w: ndarray
k 個特征值的數組。
- v: ndarray
一個數組k特征向量。
v[:, i]
是對應於特征值 w[i] 的特征向量。
- ArpackNoConvergence
當未獲得要求的收斂時。當前收斂的特征值和特征向量可以在異常對象的
eigenvalues
和eigenvectors
屬性中找到。
參數 ::
返回 ::
拋出 ::
注意:
此函數是 ARPACK [1] SNEUPD、DNEUPD、CNEUPD、ZNEUPD 的包裝器,這些函數使用隱式重啟 Arnoldi 方法來查找特征值和特征向量 [2]。
參考:
[1]ARPACK 軟件,https://github.com/opencollab/arpack-ng
[2]R. B. Lehoucq、D. C. Sorensen 和 C. Yang,ARPACK 用戶指南:通過隱式重啟 Arnoldi 方法解決大規模特征值問題。暹羅,賓夕法尼亞州費城,1998 年。
例子:
求單位矩陣的 6 個特征向量:
>>> import numpy as np >>> from scipy.sparse.linalg import eigs >>> id = np.eye(13) >>> vals, vecs = eigs(id, k=6) >>> vals array([ 1.+0.j, 1.+0.j, 1.+0.j, 1.+0.j, 1.+0.j, 1.+0.j]) >>> vecs.shape (13, 6)
相關用法
- Python SciPy linalg.eigsh用法及代碼示例
- Python SciPy linalg.eigvalsh_tridiagonal用法及代碼示例
- Python SciPy linalg.eig_banded用法及代碼示例
- Python SciPy linalg.eigvalsh用法及代碼示例
- Python SciPy linalg.eigh_tridiagonal用法及代碼示例
- Python SciPy linalg.eig用法及代碼示例
- Python SciPy linalg.eigh用法及代碼示例
- Python SciPy linalg.eigvals用法及代碼示例
- Python SciPy linalg.eigvals_banded用法及代碼示例
- Python SciPy linalg.expm用法及代碼示例
- Python SciPy linalg.expm_multiply用法及代碼示例
- Python SciPy linalg.expm_frechet用法及代碼示例
- Python SciPy linalg.expm_cond用法及代碼示例
- Python SciPy linalg.cdf2rdf用法及代碼示例
- Python SciPy linalg.LaplacianNd用法及代碼示例
- Python SciPy linalg.solve_circulant用法及代碼示例
- Python SciPy linalg.polar用法及代碼示例
- Python SciPy linalg.clarkson_woodruff_transform用法及代碼示例
- Python SciPy linalg.rsf2csf用法及代碼示例
- Python SciPy linalg.hessenberg用法及代碼示例
- Python SciPy linalg.tril用法及代碼示例
- Python SciPy linalg.triu用法及代碼示例
- Python SciPy linalg.svd用法及代碼示例
- Python SciPy linalg.ishermitian用法及代碼示例
- Python SciPy linalg.invhilbert用法及代碼示例
注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.sparse.linalg.eigs。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。