问题描述
我是 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 的第一个参数。这仅适用于一个回报(=值),但在这种情况下我不知道。我尝试了包装函数,但失败了。
提前致谢
解决方法
适合作为优化.minimize的第一个参数的函数对象,它接受这些返回值中的第一个是:
lambda x: exponential_function(x)[0]
,
您尝试过哪种包装纸。你不需要任何花哨的东西,只需要调用给定函数的东西,但只返回第一个结果,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,arr = exponential_function(x)
return value
您可以在其他答案中使用 lambda
作为建议,但我尝试制作一个更明确的包装函数,这可能更容易理解。
当我们询问您尝试过的内容时,我们并不期待有效的尝试。我们想看看您尝试了什么,并更好地了解您理解(或缺少)的内容。目标是让您思考,并在可能的情况下最终解决您自己的问题,而不是用勺子提供答案。
,嘿,您可以使用三个变量调用该函数来存储返回值,例如:
value_return,grad_return,array_return = exponential_function(x)
因此每个返回都存储在适当的变量中。之后您可以使用这些变量(在函数之外!)。 或者,只需删除您不需要的其他退货。
这是否回答了您的问题?