【问题标题】:Scipy GMRES Iteration Taking Longer than Expected TimeScipy GMRES 迭代花费的时间比预期的要长
【发布时间】:2013-11-29 20:43:13
【问题描述】:

我正在尝试反转大小为 50,000 + 行的密集矩阵。我一直在慢慢努力让 SciPy GMRES 操作正常工作。一次迭代似乎花费了过多的时间。我正在输入以下信息:

x_gm = scipy.sparse.linalg.gmres(A,b,tol=1e-08,maxiter=1)

其中 A 是一个类对象,它调用一个函数来计算矩阵向量积 A*v。这使用 Python Multiprocessing Pool 命令快速计算矩阵向量积。对于我感兴趣的矩阵,我使用 8 核的多处理池为这个产品 A*V 计时,大约需要 50 秒。但是,运行上述 gmres 命令进行一次迭代需要 1370 秒。我的印象是,大部分计算时间将是矩阵向量乘积。这似乎有点奇怪,我想知道这里是否还有其他事情发生。 gmres 是否忽略了 1 次迭代命令并进行多次迭代?任何建议或信息将不胜感激。

我使用的 Scipy 版本是 .0.9.0 版。

【问题讨论】:

    标签: python numpy matrix scipy


    【解决方案1】:

    maxiter 控制重启周期的数量,而不是点积。 点积的界限是restart*maxiter,其中restart 的默认值为20。确实,20*50 s = 1000 s,所以时间确实由矩阵向量积主导。

    您可以通过在 m-v 乘积函数中添加一个打印语句自己发现这一点。

    【讨论】:

    • 谢谢,实际上我正要编辑帖子,因为我在测试更改重启变量后发现了它。
    猜你喜欢
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    相关资源
    最近更新 更多