我有 N 个正定矩阵,我必须求解 M 个向量。由于 M 在我的情况下很大,因此使用我的 RAM 负担同时解决所有问题np.linalg.solve,有时是不可能的。但是,使用它们拆分为批次并对其进行求解会不必要地多次执行分解步骤并且不会对其进行缓存。这两个选项都没有利用矩阵是正定的这一事实。
在 python 中,解决所有向量的最佳行动方案是什么?
我有 N 个正定矩阵,我必须求解 M 个向量。由于 M 在我的情况下很大,因此使用我的 RAM 负担同时解决所有问题np.linalg.solve,有时是不可能的。但是,使用它们拆分为批次并对其进行求解会不必要地多次执行分解步骤并且不会对其进行缓存。这两个选项都没有利用矩阵是正定的这一事实。
在 python 中,解决所有向量的最佳行动方案是什么?
我只会计算 Cholesky 分解,然后使用它分批求解。不过,这将变得技术性:您将需要手动调用 Lapack 函数,恐怕(*potrf和*potrs),因为 Python 在这里没有帮助您,所以要使用完全相同的算法,您可能需要检查它是如何完成的linalg.solveand的来源dposv.f(祝你好运 Fortran)。
此外,在这些情况下,您的首选功能是scipy.linalg.solve;与它的numpy对应物不同,它可以选择利用对称性和正定性。(两者numpy都有scipy一个linalg.solve函数,它接受不同的参数,是的,我同意这很令人困惑。)