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)[source]#

找出方陣 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]

參數:
Andarray、稀疏矩陣或 LinearOperator

一個陣列、稀疏矩陣或 LinearOperator,表示運算 A @ x,其中 A 是一個實數或複數方陣。

k整數,選用

所需的特徵值和特徵向量數量。k 必須小於 N-1。不可能計算矩陣的所有特徵向量。

Mndarray、稀疏矩陣或 LinearOperator,選用

一個陣列、稀疏矩陣或 LinearOperator,表示廣義特徵值問題的運算 M@x

A @ x = w * M @ x。

如果 A 是實數矩陣,M 必須表示一個實數對稱矩陣;如果 A 是複數矩陣,則必須表示一個複數 Hermitian 矩陣。為了獲得最佳結果,M 的資料類型應與 A 的資料類型相同。此外

如果 sigma 為 None,M 是正定矩陣

如果指定 sigma,M 是正半定矩陣

如果 sigma 為 None,eigs 需要一個運算子來計算線性方程式 M @ x = b 的解。這在內部透過(稀疏)LU 分解針對顯式矩陣 M 完成,或透過迭代求解器針對一般線性運算子完成。或者,使用者可以提供矩陣或運算子 Minv,其給出 x = Minv @ b = M^-1 @ b

sigma實數或複數,選用

使用 shift-invert 模式尋找 sigma 附近的特徵值。這需要一個運算子來計算線性系統 [A - sigma * M] @ x = b 的解,如果未指定 M,則 M 是單位矩陣。這在內部透過(稀疏)LU 分解針對顯式矩陣 A & M 完成,或者如果 A 或 M 是通用線性運算子,則透過迭代求解器完成。或者,使用者可以提供矩陣或運算子 OPinv,其給出 x = OPinv @ b = [A - sigma * M]^-1 @ b。對於實數矩陣 A,shift-invert 可以在虛數模式或實數模式下完成,由參數 OPpart('r' 或 'i')指定。請注意,當指定 sigma 時,關鍵字 'which'(如下)指的是移動後的特徵值 w'[i],其中

如果 A 是實數矩陣且 OPpart == 'r'(預設),

w'[i] = 1/2 * [1/(w[i]-sigma) + 1/(w[i]-conj(sigma))].

如果 A 是實數矩陣且 OPpart == 'i',

w'[i] = 1/2i * [1/(w[i]-sigma) - 1/(w[i]-conj(sigma))].

如果 A 是複數矩陣,w'[i] = 1/(w[i]-sigma)

v0ndarray,選用

迭代的起始向量。預設值:隨機

ncv整數,選用

生成的 Lanczos 向量數目。ncv 必須大於 k;建議 ncv > 2*k。預設值:min(n, max(2*k + 1, 20))

which字串,['LM' | 'SM' | 'LR' | 'SR' | 'LI' | 'SI'],選用

要尋找的 k 個特徵向量和特徵值

'LM' : 最大量值

'SM' : 最小量值

'LR' : 最大實部

'SR' : 最小實部

'LI' : 最大虛部

'SI' : 最小虛部

當 sigma != None 時,'which' 指的是移動後的特徵值 w'[i](請參閱上面的 'sigma' 中的討論)。ARPACK 通常更擅長尋找大值而不是小值。如果需要小特徵值,請考慮使用 shift-invert 模式以獲得更好的效能。

maxiter整數,選用

允許的最大 Arnoldi 更新迭代次數。預設值:n*10

tol浮點數,選用

特徵值的相對準確度(停止準則)。預設值 0 表示機器精度。

return_eigenvectors布林值,選用

除了特徵值之外,還傳回特徵向量 (True)

Minvndarray、稀疏矩陣或 LinearOperator,選用

請參閱上面 M 中的註解。

OPinvndarray、稀疏矩陣或 LinearOperator,選用

請參閱上面 sigma 中的註解。

OPpart{‘r’ 或 ‘i’},選用

請參閱上面 sigma 中的註解

傳回值:
wndarray

k 個特徵值的陣列。

vndarray

一個 k 個特徵向量的陣列。v[:, i] 是對應於特徵值 w[i] 的特徵向量。

引發:
ArpackNoConvergence

當未達到要求的收斂時。目前收斂的特徵值和特徵向量可以作為例外物件的 eigenvalueseigenvectors 屬性找到。

另請參閱

eigsh

對稱矩陣 A 的特徵值和特徵向量

svds

矩陣 A 的奇異值分解

註解

此函數是 ARPACK [1] SNEUPD、DNEUPD、CNEUPD、ZNEUPD 函數的包裝器,這些函數使用隱式重新啟動 Arnoldi 方法來尋找特徵值和特徵向量 [2]

參考文獻

[1]

ARPACK 軟體,opencollab/arpack-ng

[2]

R. B. Lehoucq、D. C. Sorensen 和 C. Yang,《ARPACK USERS GUIDE: Solution of Large Scale Eigenvalue Problems by Implicitly Restarted Arnoldi Methods》。SIAM,費城,賓夕法尼亞州,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)