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


python scipy sparse.linalg.LinearOperator用法及代码示例

用法:

class scipy.sparse.linalg.LinearOperator(dtype, shape)

执行矩阵向量乘积的通用接口

许多迭代方法(例如cg,gmres)不需要知道矩阵的单个项即可求解线性系统A * x = b。这样的求解器只需要计算矩阵向量乘积A * v,其中v是一个密集向量。此类用作迭代求解器和matrix-like对象之间的抽象接口。

要构造具体的LinearOperator,可以将适当的可调用对象传递给此类的构造函数,或者对其进行子类化。

子类必须实现方法之一_matvec_matmat,以及属性/属性shape(一对整数)和dtype(可能为无)。它可能称为__init__在此类上验证这些属性。实施中_matvec自动实施_matmat(使用朴素算法),反之亦然。

(可选)子类可以实现_rmatvec或者_adjoint实现Hermitian伴随(共轭转置)。与_matvec_matmat,实施_rmatvec或者_adjoint自动实现另一个。实施中_adjoint最好;_rmatvec主要是为了向后兼容。

参数:

shapetuple

矩阵尺寸(M,N)。

matveccallable f(v)

返回值返回A * v。

rmatveccallable f(v)

返回A^H * v,其中A^H是A的共轭转置。

matmatcallable f(V)

返回A * V,其中V是一个尺寸为(N,K)的密集矩阵。

dtypedtype

矩阵的数据类型。

rmatmatcallable 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.])
属性
argstuple

对于描述其他线性运算符的乘积等的线性运算符,为二进制运算的操作数。

方法:

__call__(self, x)

将self称为函数。

adjoint(self)

埃尔米特伴随。

dot(self, x)

Matrix-matrix或matrix-vector乘法。

matmat(self, X)

Matrix-matrix乘法。

matvec(self, x)

Matrix-vector乘法。

rmatmat(self, X)

伴随matrix-matrix乘法。

rmatvec(self, x)

伴随matrix-vector乘法。

transpose(self)

转置此线性运算符。

__mul__

源码:

scipy.sparse.linalg.LinearOperator的API实现见:[源代码]

相关用法

注:本文由纯净天空筛选整理自 scipy.sparse.linalg.LinearOperator。非经特殊声明,原始代码版权归原作者所有,本译文的传播和使用请遵循“署名-相同方式共享 4.0 国际 (CC BY-SA 4.0)”协议。