【问题标题】:scipy.optimize.least_squares return of only the solutionscipy.optimize.least_squares 仅返回解决方案
【发布时间】:2018-10-06 19:55:04
【问题描述】:
我正在尝试使用Lest Square Optimization 函数求解一组线性方程。由于我必须使用解向量 x 进行进一步计算,因此我只想返回 x 而不是其余的。
我刚开始使用 Python,所以我不知道,我怎么能输入代码,我只得到 x 而不是整个返回。
我已经尝试过类似的代码:
y= spo.least_squares(test_function, x0) [0]
但这对我没有任何作用。
你能帮帮我吗?
【问题讨论】:
标签:
python-3.x
optimization
scipy
【解决方案1】:
scipy.optimize.least_squares 的文档指出:
返回:OptimizeResult,定义了以下字段:
x : ndarray, 形状 (n,)
找到解决方案。
...
这意味着您需要按名称访问结果字段。要仅获取x,这应该可以:
y = spo.least_squares(test_function, x0).x
但是,我不想鼓励这种用法。如果优化由于某种原因失败,你永远不会知道。所以除非你绝对确定它不会失败,或者你不在乎它是否失败,否则不要使用这种模式。
最好编写一个处理错误处理并在成功时转发x 的包装器:
def my_lsq(*args, **kwargs):
result = spo.least_squares(*args, **kwargs)
if result.success:
return result.x
else:
print(result)
raise RuntimeError(result.message)
可以像y = my_lsq(test_function, x0)一样简单地使用。