如何从scipy LinearOperator获取numpy数组?

问题描述:

我有一个LinearOperator在一些程序包中构造。我想计算一个iLU预处理器并在scipy解算器中使用它。 问题是预处理器计算的输入对象的类型。如果你想使用“spilu”函数,你应该在输入中使用numpy数组,但是我有一个LinearOperator! 因此,如何将LinearOperator转换为numpy数组?或者计算iLU预处理器是否存在其他方法?如何从scipy LinearOperator获取numpy数组?

+0

这是LO,https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.sparse.linalg.LinearOperator.html – hpaulj

+0

您可能需要添加一个小的具体示例。 – hpaulj

+0

*“我在一些程序包中构建了LinearOperator。”*哪个包?你对“LinearOperator”有什么了解? –

您可以得到与LinearOperator相关联的矩阵的一种方法是将其乘以单位矩阵。

在这个例子中,opLinearOperator具有形状(3,3):

In [103]: op 
Out[103]: <3x3 MyOperator with dtype=int64> 

下面是与op相关联的实际矩阵:

In [104]: op * np.eye(op.shape[1], dtype=op.dtype) 
Out[104]: 
array([[1, 2, 0], 
     [3, 4, 5], 
     [0, 6, 7]]) 

警告! np.eye()创建一个密集的数组,并且上面的乘法返回密集的 numpy数组。如果你的LinearOperator的形状太大,你可能会用完内存。

LinearOperator稀疏矩阵没有生成中间密集数组可能是可能的,但将需要更多的代码。在花费太多时间之前,请检查您具有的特定LinearOperator的属性和方法。它可能具有已经处于稀疏格式的内部数据。