当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy linalg.LinearOperator用法及代码示例


本文简要介绍 python 语言中 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 以实现 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) 的密集矩阵。

注意

用户定义的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 int

维数(始终为 2)

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.sparse.linalg.LinearOperator。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。