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__