使用 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()
函数。重建排列矩阵Pr
和Pc
后,我可以将它们与L
和R
一起转储,并拥有我需要的一切。我还填写了对scipy
的功能请求,希望将来的版本中会有更简单的选择。