SciPy 稀疏不完全 LU 分解的内存使用

Memory use by sparse incomplete LU factorisation with SciPy

我正在解决涉及稀疏矩阵的问题。它有三个主对角线,和一堆其他的次对角线。矩阵的完整大小为 (2048000, 2048000),但由于它非常稀疏,它只存储了 525312000 个元素,对应于双精度大约 4 GB 的内存。当我创建这个矩阵时,Activity Monitor 和 Mac 上的 top 都报告了大约 4 GB 的内存使用,正如预期的那样。

接下来,我创建了一个不完全 LU 分解,在使用 BiCGStab 求解矩阵系统时用作预条件子。我使用以下代码:

from scipy.sparse.linalg import spilu
ILU = spilu(csc_matrix(L+Lr))

这里,Lr是我上面提到的矩阵,L是另一个稀疏对角矩阵,它是纯三对角的,因此要小得多。

变量ILU的类型是SuperLU,根据ILU.nnz它只包含20384063个存储元素,这意味着它应该占用大约150MB的内存,然而Activity Monitor 和 top 都声称我现在使用了大约 8 GB 的内存,而之前我使用了大约 4 GB。那么所有这些记忆都发生了什么?

不是一个特别令人满意的答案,但我在 SciPy 存储库上发布了一个问题,从讨论来看,这似乎只是 Mac 上的一个问题,而且没有太多有待解决。

https://github.com/scipy/scipy/issues/13827