當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python SciPy linalg.LinearOperator用法及代碼示例


本文簡要介紹 python 語言中 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 主要是為了向後兼容。

參數

shape 元組

矩陣尺寸(M,N)。

matvec 可調用 f(v)

返回返回 A * v。

rmatvec 可調用 f(v)

返回 A^H * v,其中 A^H 是 A 的共軛轉置。

matmat 可調用 f(V)

返回 A * V,其中 V 是維度為 (N, K) 的密集矩陣。

dtype 類型

矩陣的數據類型。

rmatmat 可調用 f(V)

返回 A^H * V,其中 V 是維度為 (M, K) 的密集矩陣。

注意

用戶定義的matvec() 函數必須正確處理 v 具有形狀 (N,) 的情況以及 (N,1) 情況。返回類型的形狀由 LinearOperator 內部處理。

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=float64>
>>> A.matvec(np.ones(2))
array([ 2.,  3.])
>>> A * np.ones(2)
array([ 2.,  3.])

屬性

args 元組

對於說明其他線性算子的乘積等的線性算子,二元運算的操作數。

ndim int

維數(始終為 2)

相關用法


注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.sparse.linalg.LinearOperator。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。