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 来实现厄米共轭(共轭转置)。与 _matvec_matmat 一样,实现 _rmatvec_adjoint 中的任何一个都会自动实现另一个。实现 _adjoint 是首选;_rmatvec 主要是为了向后兼容。

参数:
形状元组

矩阵维度 (M, N)。

matvec可调用函数 f(v)

返回 A * v 的结果。

rmatvec可调用函数 f(v)

返回 A^H * v,其中 A^H 是 A 的共轭转置。

matmat可调用函数 f(V)

返回 A * V,其中 V 是一个维度为 (N, K) 的密集矩阵。

dtypedtype

矩阵的数据类型。

rmatmat可调用函数 f(V)

返回 A^H * V,其中 V 是一个维度为 (M, K) 的稠密矩阵。

属性:
参数元组

对于描述其他线性算子乘积等的线性算子,二元运算的操作数。

ndim整数

维度数量(这总是2)

方法

__call__(x)

作为函数调用自身。

adjoint()

Hermitian 伴随。

dot(x)

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

matmat(X)

矩阵乘法。

matvec(x)

矩阵-向量乘法。

rmatmat(X)

伴随矩阵-矩阵乘法。

rmatvec(x)

伴随矩阵-向量乘法。

transpose()

转置这个线性算子。

__mul__

参见

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.])