使用 Numpy 求解非常大的线性方程组

ort*_*noa 6 python numpy algebra

我正在尝试求解一个由 1 百万 x 1 百万方阵和一个 1 百万解向量组成的方程组。

为此,我使用 np.linalg.solve(matrix,answers) 但需要很长时间。

有办法加快速度吗?

谢谢@Chris,但这并不能回答问题,因为我也尝试过使用 Scipy 模块,但仍然需要很长时间才能解决。我认为我的计算机无法在 RAM 中保存那么多数据

好吧,为了清楚起见,我刚刚发现我试图求解的矩阵的名称是希尔伯特矩阵

Jér*_*ard 3

请重新考虑解决如此庞大系统的需求,除非您的系统非常稀疏

事实上,将输入/输出存储在 PC 存储设备上几乎是不可能的:输入密集矩阵需要 8 TB(双精度值),输出肯定也需要几 TB,更不用说需要临时数据存储来计算结果(密集矩阵至少 8 TB)。如果您的输入矩阵几乎全是零,但您需要矩阵包含 >99.95% 的零,以便将其存储在 RAM 中,那么稀疏矩阵会很有帮助。

此外,解决系统的时间复杂度在您的情况下也是O(n m min(n,m))如此O(n^3)(请参阅:这篇文章)。这意味着数十亿美元的运算。基本主流处理器不超过0.5 TFlops。事实上,我的相对较好的 i5-9600KF 在 LINPACK 计算密集型基准测试中达到了 0.3 TFlops。这意味着假设仅受主流处理器速度的限制,计算肯定需要一个月的时间。实际上,众所周知,求解大型方程组会受到内存限制,因此在实践中速度会慢得多,因为现代 RAM 是现代计算机的瓶颈(请参阅:内存墙)。因此,对于主流 PC,假设计算可以在 RAM 中完成,这应该需要几个月到一年的时间,而这对于密集系统来说是不可能的。由于高端 SSD 比优质 PC 的 RAM 慢大约一个数量级,因此您应该预计计算需要几年时间。更不用说 20 TB 高端 SSD 非常昂贵,而且在如此长的计算时间内考虑断电和操作系统故障可能是个好主意......同样,稀疏矩阵可以提供很大帮助,但请注意,解决稀疏矩阵众所周知,系统比密集系统慢得多,除非零的数量非常少。

此类系统是在超级计算机(或至少是大型计算集群)上解决的,而不是在普通 PC 上解决的。这需要使用分布式计算和 MPI 和分布式线性求解器等工具。整个研究领域都在致力于这个主题,以提高它们在大型系统上的效率。

请注意,计算近似值可能会更快,但首先应该解决空间问题......