如何从scipy LinearOperator获取numpy数组?

时间:2016-12-05 12:28:05

标签: python arrays numpy scipy

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

1 个答案:

答案 0 :(得分:1)

您可以获得与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的属性和方法。它可能具有稀疏格式的内部数据。