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)伴随矩阵-向量乘法。
转置这个线性算子。
__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.])