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 上的一个问题,而且没有太多有待解决。
我正在解决涉及稀疏矩阵的问题。它有三个主对角线,和一堆其他的次对角线。矩阵的完整大小为 (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 上的一个问题,而且没有太多有待解决。