我有一个函数,它接受几个参数(一个数组和两个浮点数)并返回一个标量(浮点数)。 现在我想通过改变两个参数来最小化这个函数:两个浮点数。 然后使用数组在函数内“解包”其内容(数组和浮点数)。
如何使用SciPy的fmin功能完成这项工作?我很难找到正确的语法..
该功能类似于:
def func(x, y, data)
data1=data[0]
data2=data[...]
...
...
result = ...x...y...data1...data2... #result is a scalar (float)
return result
在这种情况下scipy.optimize.fmin
应该是什么样的?
optimize.fmin(func, ???)
非常感谢提前!
一切顺利, P.P。
答案 0 :(得分:5)
scipy
假设参数在数组中。您可以定义辅助函数:
def helper(xy):
return func(xy[0], xy[1], data)
并使用optimize.fmin
最小化它:
optimize.fmin(helper, np.array([x0, y0]), ...)
答案 1 :(得分:3)
我在SciPy的documentation中找到了答案!我只是不习惯文档的编程“术语”......(尽管文档对于像我这样的新手非常有用)。
所以,这样做的方法如下:
不应像我的问题那样定义函数(最小化),而应将其定义为
def func(x, *args) #it is literally "*args"! y=x[0] z=x[1] data1=data[0] data2=data[...] ... result = ...y...z...data1...data2... #result is a scalar (float) return result
现在,optimize.fmin
函数应为
optimize.fmin(func, x0=[y_estimate, z_estimate], args=(data))
当您向x0
函数提供数组optimize.fmin
(初始猜测)时,显然(可能是我错了),然后知道它必须优化具有“大小”的数组“x0
。您在函数中需要的所有其他数据必须在元组args
中给出(在此示例中,元组args
中只有一个数组,但它可能是args=(data1, data2, ...)
,其中如果您不需要在函数内部解压缩它。
总结:初始猜测x0
只是一个数组;额外的参数args
只是一个元组;该函数应该(字面上!)定义为def func(x, *args)
;数组x
和元组args
可以在函数内“解包”(y=x[0]
,z=x[1]
,...和data1=args[0]
,{{ 1}},...)。