【发布时间】:2015-06-19 16:15:34
【问题描述】:
使用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 分解的结果缓存到文件中吗?
【问题讨论】:
-
不幸的是,我没有看到任何直接的方法来腌制
SuperLU实例。如果您可以直接实例化SuperLU,那么您可以使用copy_reg.pickle来注册自定义酸洗函数,但正如您所发现的,这似乎是不可能的。正如@MikeMcKerns 提到的,您可以保存L和U稀疏三角矩阵,但为了使用它们,您仍然需要自己重新实现SuperLU.solve()。 -
这听起来确实是一个不错的功能,所以我建议您在 the scipy issue tracker 上发布新功能请求
-
好点@ali_m,我刚刚提交了一个请求。
标签: python numpy scipy linear-algebra pickle