所以我尝试使用scipy.optimize.root,但内存不足,原因是内存不足,无法计算jacobian。
我想知道,在内存受限的情况下,我可以使用什么替代方案?或者,是否有办法绕过它?
我的输入大小是400,000,输出相似,这意味着雅可比是400,000^2,这是一个杀手.
如果你有什么建议让这个问题更清楚,请告诉我。
更新
我想我已经想出了一种在任何给定点上有效计算雅可比的方法。scipy.optimize.root的文档说明如下:
如果jac是布尔型的,是真的,则假设乐趣与目标函数一起返回Jacobian的值。如果是假的,则对Jacobian进行数值估计。jac也可以是一个可调用的返回雅可比的乐趣。在这种情况下,它必须接受相同的参数作为乐趣。
从突出显示的角度来看,我猜想如果fun(x)是我的乐趣,它会给出如下内容:
f, jac = fun(x)其中f= f(x)和jac = jacobian(x)。
对吗?
发布于 2014-12-29 13:31:20
尝试使用method='krylov'。
另见http://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html#root-finding-for-large-problems
如果您了解雅可比,就可以编写函数,以便f, jac = fun(x)并将jac=True选项交给root。但是,考虑到有几种方法不支持稀疏的射精,这可能对您没有帮助。
其次,最好使用稀疏jacobian作为Krylov方法的预条件。
https://stackoverflow.com/questions/27630715
复制相似问题