2016-12-05 57 views
1

我有一個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」有什麼瞭解? –

回答

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的屬性和方法。它可能具有已經處於稀疏格式的內部數據。