【问题标题】:Function with multiple return values as input in scipy.minimize在 scipy.minimize 中具有多个返回值作为输入的函数
【发布时间】:2021-08-18 21:29:06
【问题描述】:

我是 python 新手,我的任务是最小化具有 3 个返回值的数学函数(在我必须使用的模板中提供),但我只需要这些返回中的第一个。这是一个例子

```
def exponential_function(x):

   value = -np.exp(-0.5 * (x[0]**2 + x[1]**2))
   grad = np.array([-value * x[0], -value * x[1]])

   return value, grad, np.array([0,0])

```

这必须是 optimize.minimize 的第一个参数。这仅适用于一个返回(=值),但在这种情况下我不知道。我尝试了包装函数,但失败了。

提前谢谢你

【问题讨论】:

  • “我尝试了包装函数,但失败了。” 准确显示您尝试过的内容以及遇到的错误。包装函数应该可以工作。
  • 我已经玩了 4 个小时了,我尝试了几件事,所以我真的没什么可显示的......

标签: python numpy optimization scipy minimize


【解决方案1】:

一个适合作为optimize.minimize的第一个参数的函数对象,它接受这些返回中的第一个是:

lambda x: exponential_function(x)[0]

【讨论】:

    【解决方案2】:

    您尝试了哪种包装器。你不需要任何花哨的东西,只需要调用给定函数但只返回第一个结果value

    def exponential_function(x):
    
       value = -np.exp(-0.5 * (x[0]**2 + x[1]**2))
       grad = np.array([-value * x[0], -value * x[1]])
    
       return value, grad, np.array([0,0])
    
    def myfunc(x):
       value, grad, arr = exponential_function(x)
       return value
    

    您可以在其他答案中使用lambda 作为建议,但我尝试制作一个更明确的包装函数,这可能更容易理解。

    当我们询问您尝试了什么时,我们不希望尝试有效。我们想看看您尝试了什么,并更好地了解您理解(或缺少)什么。目标是让您思考,并在可能的情况下最终解决您自己的问题,而不是灌输答案。

    【讨论】:

      【解决方案3】:

      你可以只调用带有三个变量的函数来存储返回值,例如:

      value_return, grad_return, array_return = exponential_function(x)
      

      所以每个返回值都存储在适当的变量中。之后您可以使用这些变量(在函数之外!)。 或者,只需删除您不需要的其他返回。

      这能回答你的问题吗?

      【讨论】:

      • 嘿 steTATO,谢谢你的回答。恐怕这行不通。我不能只使用变量作为 minmize 的第一个参数
      • 由于最小化只能接受一个函数,所以定义一个包装函数或 lambda 如Armali's response 所示。
      猜你喜欢
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多