scipy.sparse.linalg.

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 整數,因此判斷可能不準確。假設 matmatrmatvecrmatmat 在給定 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)

共軛矩陣-向量乘法。

transpose()

轉置此線性運算子。

__mul__