【问题标题】:How to get numpy array from scipy LinearOperator?如何从 scipy LinearOperator 获取 numpy 数组?
【发布时间】:2016-12-05 12:28:05
【问题描述】:

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

【问题讨论】:

标签: python arrays numpy scipy


【解决方案1】:

获得与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 的属性和方法。它可能包含已经采用稀疏格式的内部数据。

【讨论】:

    猜你喜欢
    • 2018-01-26
    • 1970-01-01
    • 2013-12-13
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    • 2015-07-13
    • 1970-01-01
    相关资源
    最近更新 更多