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)伴随矩阵-向量乘法。
转置此线性算子。
__mul__