LinearOperator#
- class scipy.sparse.linalg.LinearOperator(*args, **kwargs)[來源]#
用於執行矩陣向量乘積的通用介面
許多迭代方法(例如 cg, gmres)不需要知道矩陣的個別條目即可求解線性系統 A@x=b。此類求解器僅需要計算矩陣向量乘積 A@v,其中 v 是密集向量。此類別作為迭代求解器和類矩陣物件之間的抽象介面。
若要建構具體的 LinearOperator,請將適當的可呼叫物件傳遞給此類別的建構函式,或將其子類化。
子類別必須實作方法
_matvec
和_matmat
之一,以及屬性/屬性shape
(整數對)和dtype
(可能為 None)。它可以呼叫此類別上的__init__
以驗證這些屬性。實作_matvec
會自動實作_matmat
(使用樸素演算法),反之亦然。或者,子類別可以實作
_rmatvec
或_adjoint
以實作 Hermitian 共軛(共軛轉置)。與_matvec
和_matmat
一樣,實作_rmatvec
或_adjoint
會自動實作另一個。實作_adjoint
是較佳的;_rmatvec
主要用於向後相容性。- 參數:
- shapetuple
矩陣維度 (M, N)。
- matveccallable f(v)
傳回 A @ v。
- rmatveccallable f(v)
傳回 A^H @ v,其中 A^H 是 A 的共軛轉置。
- matmatcallable f(V)
傳回 A @ V,其中 V 是維度為 (N, K) 的密集矩陣。
- dtypedtype
矩陣的資料類型。
- rmatmatcallable f(V)
傳回 A^H @ V,其中 V 是維度為 (M, K) 的密集矩陣。
另請參閱
aslinearoperator
建構 LinearOperator
註解
使用者定義的 matvec() 函數必須正確處理 v 具有形狀 (N,) 以及 (N,1) 的情況。傳回類型的形狀由 LinearOperator 內部處理。
強烈建議明確指定 dtype,否則將自動判斷,但會以在 int8 零向量上使用提升的 dtype 進行單次 matvec 應用為代價。Python int 可能難以在
matvec
的定義中自動轉換為 numpy 整數,因此判斷可能不準確。假設matmat
、rmatvec
和rmatmat
在給定 int8 輸入的情況下,會產生與matvec
相同的輸出 dtype。LinearOperator 實例也可以彼此相乘、相加和取冪,所有操作都是延遲的:這些運算的結果始終是一個新的複合 LinearOperator,它將線性運算延遲到原始運算子並組合結果。
有關如何將 LinearOperator 子類化以及具體 LinearOperator 實例的幾個範例的更多詳細資訊,可以在外部專案 PyLops 中找到。
範例
>>> import numpy as np >>> from scipy.sparse.linalg import LinearOperator >>> def mv(v): ... return np.array([2*v[0], 3*v[1]]) ... >>> A = LinearOperator((2,2), matvec=mv) >>> A <2x2 _CustomLinearOperator with dtype=int8> >>> A.matvec(np.ones(2)) array([ 2., 3.]) >>> A @ np.ones(2) array([ 2., 3.])
- 屬性:
- argstuple
對於描述其他線性運算子的乘積等的線性運算子,二元運算的運算元。
- ndimint
維度數量(這始終為 2)
方法
__call__
(x)將 self 作為函數呼叫。
adjoint
()Hermitian 共軛。
dot
(x)矩陣-矩陣或矩陣-向量乘法。
matmat
(X)矩陣-矩陣乘法。
matvec
(x)矩陣-向量乘法。
rmatmat
(X)共軛矩陣-矩陣乘法。
rmatvec
(x)共軛矩陣-向量乘法。
轉置此線性運算子。
__mul__