【问题标题】:In scipy.optimize.minimize, how can I feed optional arguments into the args=() tuple?在 scipy.optimize.minimize 中,如何将可选参数输入 args=() 元组?
【发布时间】:2020-02-06 09:15:52
【问题描述】:

所以我有一些功能

def fun(x,y=None):
    # Do some stuff

我想在 x 上最小化这个函数,但是有时我会想要一个额外的参数 y。 (本质上,我希望 y 始终采用其默认值,除非我正在最小化。)

通常,如果函数只是def fun(x,y):,我可以使用scipy.optimize.minimize(x,args=(y))。但是当 y 是可选变量时我该怎么办?输入args=(y=value) 给了我无效的语法,(当然,它看起来很错误),但我不确定正确的语法是什么。

如果相关,我正在使用 Python 3.7。

【问题讨论】:

  • 这听起来真的像你应该有两个功能。 (解决minimize 问题很简单——如果y 不是可选的,您将使用完全相同的调用,因为可选参数仍然可以按位置传递——但是描述你想如何使用这个函数真的听起来不像是 1 个功能的工作。)

标签: python parameter-passing scipy-optimize scipy-optimize-minimize


【解决方案1】:

你不能。 minimize 只为它调用的函数接受不带关键字的可选参数。这是用the documentation 编写的,因为它将要调用的函数描述为fun(x, *args),没有任何可选参数。

如果您的函数是f(x, y=None, z=None),则必须调用scipy.optimize.minimize(f, x, (y, z))

相反,我会构造一个 lambda,它直接将参数作为关键字传递。这样做:

scipy.optimize.minimize(lambda x: f(x, z=0), x)

这清楚地表明您传递了哪些可选参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-28
    • 2018-10-21
    • 1970-01-01
    • 2020-11-11
    • 2014-07-13
    • 1970-01-01
    • 2017-04-08
    • 2017-02-04
    相关资源
    最近更新 更多