【问题标题】:Doing a scipy.optimize.root runs out of memory, what are good alternatives?做一个 scipy.optimize.root 内存不足,有什么好的选择?
【发布时间】:2014-12-29 21:31:20
【问题描述】:

所以我尝试使用scipy.optimize.root,但内存不足,原因是没有足够的内存来计算雅可比。

我想知道考虑到我的内存限制,我可以使用什么替代方案?或者有没有办法以某种方式规避它?

我的输入大小约为 400,000,输出相似,这意味着 jacobian 是 400,000^2,这是一个杀手...

如果您有任何建议可以使问题更清晰,请告诉我。

更新

我想我已经找到了一种有效计算任何给定点的雅可比的方法。 scipy.optimize.root 的文档说明如下:

如果 jac 是布尔值并且 为 True,则 fun 假定返回雅可比矩阵的值以及目标函数。如果为 False,Jacobian 将以数值方式估计。 jac 也可以是一个可调用的返回有趣的雅可比行列式。在这种情况下,它必须接受与 fun 相同的参数。

我从突出显示的点猜测,如果 fun(x) 是我的函数,它给出的内容类似于:

f, jac = fun(x)

其中 f = f(x) 和 jac = jacobian(x)。

对吗?

【问题讨论】:

  • 您使用的是哪种 method 以及您的 jac 参数设置为什么?
  • 两者都使用默认值,即不传递任何东西

标签: python numpy scipy


【解决方案1】:

尝试使用method='krylov'

另见http://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html#root-finding-for-large-problems

如果你知道雅可比,你可以编写你的函数,以便f, jac = fun(x) 并将jac=True 选项赋予root。但是,鉴于其中一些方法不支持稀疏雅可比,这可能对您没有帮助。

接下来最好的方法是使用稀疏雅可比矩阵作为 Krylov 方法的预条件子。

【讨论】:

    猜你喜欢
    • 2011-07-01
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    相关资源
    最近更新 更多