使用 scipy.sparse.linalg.spilu ,我计算了一个非常大的稀疏矩阵的不完全LU分解。由于此过程很耗时,因此我想保存计算出的LU分解。该函数返回 scipy.sparse.linalg.SuperLU 对象。

我的第一次尝试是使用pickle模块保存整个对象。但是,我得到:

cPickle.PicklingError: Can't pickle <type 'SuperLU'>:
   attribute lookup __builtin__.SuperLU failed

错误信息。

我的第二个想法是保存SuperLU对象('L', 'U', 'nnz', 'perm_c', 'perm_r', 'shape')的相关类成员,然后重新组装它。但是,SuperLU对象似乎是不可实例化的:
>>> SuperLU()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: cannot create 'SuperLU' instances

有人知道如何将不完全LU分解的结果缓存到文件中吗?

最佳答案

最后,我遵循了ali_m的建议,并编写了自己的solve()函数。重建排列矩阵PrPc后,我可以将它们与LR一起转储,并拥有我需要的一切。我还填写了对scipy的功能请求,希望将来的版本中会有更简单的选择。

10-04 20:45