我有一个相当大的线性方程组(大约 30K 个方程)。我scipy.sparse.spsolve用来解这些方程。最初,我尝试使用 10K 方程,但由于内存问题,我的程序被杀死了。一般来说,我想知道算法的内存和时间要求,以及spsolve算法如何解决方程组。它是基于因式分解吗?任何人都可以帮助我吗?
NB* - 方程组没有预定义的结构,如对称性等,唯一的问题是它非常稀疏。
我有一个相当大的线性方程组(大约 30K 个方程)。我scipy.sparse.spsolve用来解这些方程。最初,我尝试使用 10K 方程,但由于内存问题,我的程序被杀死了。一般来说,我想知道算法的内存和时间要求,以及spsolve算法如何解决方程组。它是基于因式分解吗?任何人都可以帮助我吗?
NB* - 方程组没有预定义的结构,如对称性等,唯一的问题是它非常稀疏。
首先,您需要确保已经以稀疏格式构建和存储原始矩阵。否则,您的问题可能已经在这个阶段开始了,因为以密集格式存储如此大的矩阵,然后才将其转换为稀疏矩阵很容易导致内存崩溃。
根据scipy.sparse.linalg.spsolve文档,默认情况下它使用UMFPACK,这将是多面 LU 分解。这个答案将使您对您的案例中可能发生的实际情况有所了解(填写)。简而言之,即使您的非分解矩阵是稀疏的,它的结构(以及分解算法中使用的重新排序)也有可能会导致大量填充,从而产生更密集的分解矩阵。
一般来说,很难为稀疏矩阵分解给出时间和内存估计,因为很大程度上取决于矩阵的结构、使用的算法和减少填充的策略。