scipy.sparse.linalg.

LinearOperator#

class scipy.sparse.linalg.LinearOperator(*args, **kwargs)[source]#

执行矩阵向量积的通用接口

许多迭代方法(例如 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)。

另请参阅

aslinearoperator

构建线性算子

注释

用户定义的 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元组

对于描述其他线性运算符的积等的线性运算符,二元运算的运算数。

ndimint

维度数(始终为 2)

方法

__call__(x)

将自身作为函数调用。

adjoint()

Hermitian 伴随。

dot(x)

矩阵-矩阵或矩阵-向量乘法。

matmat(X)

矩阵-矩阵乘法。

matvec(x)

矩阵-向量乘法。

rmatmat(X)

伴随矩阵-矩阵乘法。

rmatvec(x)

伴随矩阵-向量乘法。

transpose()

转置此线性算子。

__mul__