scipy.sparse.linalg.LinearOperator¶
- class scipy.sparse.linalg.LinearOperator(*args, **kwargs)[源代码]¶
用于执行矩阵向量乘积的通用接口
许多迭代方法(例如CG、GMRES)不需要知道矩阵的各个项来求解线性系统A x=b. Such solvers only require the computation of matrix vector products, A 其中v是稠密向量。此类充当迭代求解器和类似矩阵的对象之间的抽象接口。
要构造具体的LinearOperator,要么将适当的可调用传递给该类的构造函数,要么将其子类化。
子类必须实现以下任一方法
_matvec
和_matmat
,以及属性/属性shape
(整数对)和dtype
(可能没有)。它可能会调用__init__
来验证这些属性。实施_matvec
自动实现_matmat
(使用朴素算法),反之亦然。可选地,子类可以实现
_rmatvec
或_adjoint
实现厄米特伴随(共轭转置)。和以前一样_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元组
对于描述其他线性运算符的乘积等的线性运算符,指二元运算的操作数。
- ndim集成
维数(该值始终为2)
方法:
__call__
\(X)将Self作为函数调用。
adjoint
\()赫米特的伴星。
dot
\(X)矩阵-矩阵或矩阵-向量乘法。
matmat
\(X)矩阵-矩阵乘法。
matvec
\(X)矩阵-向量乘法。
rmatmat
\(X)伴随矩阵-矩阵乘法。
rmatvec
\(X)伴随矩阵向量乘法。
transpose
\()转置这个线性运算符。
__mul__