我有一个在某些程序包中构造的 LinearOperator 。我想计算 iLU 预处理器并在 scipy 求解器中使用它。问题是预处理器计算的输入对象的类型。如果你想使用“spilu”函数,你应该在输入中使用 numpy 数组,但我有一个 LinearOperator!因此,如何将 LinearOperator 转换为 numpy 数组?或者是否存在其他计算 iLU 预处理器的方法?
获得与LinearOperator
关联的矩阵的一种方法是将其乘以单位矩阵。
在此示例中,op
是形状为 (3, 3) 的 LinearOperator
:
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()
创建一个dense 数组,上面的乘法返回一个dense numpy 数组。如果您的 LinearOperator
的形状太大,您可能会耗尽内存。
从LinearOperator
到稀疏矩阵而不生成中间密集数组可能是可能的,但需要更多的代码。在花费太多时间之前,请检查您拥有的特定 LinearOperator
的属性和方法。它可能具有已经采用稀疏格式的内部数据。
我是一名优秀的程序员,十分优秀!