Python Scipy最小化fmin-语法问题
我有一个函数,它接受多个参数(一个数组和两个浮点),并返回一个标量(浮点)。 现在我想通过改变两个参数来最小化这个函数:两个浮点数。 数组在函数内部“解包”,然后使用其内容(数组和浮点) 如何使用SciPy的fmin功能实现这一点?我很难找到正确的语法 该函数类似于:Python Scipy最小化fmin-语法问题,python,optimization,scipy,minimize,Python,Optimization,Scipy,Minimize,我有一个函数,它接受多个参数(一个数组和两个浮点),并返回一个标量(浮点)。 现在我想通过改变两个参数来最小化这个函数:两个浮点数。 数组在函数内部“解包”,然后使用其内容(数组和浮点) 如何使用SciPy的fmin功能实现这一点?我很难找到正确的语法 该函数类似于: def func(x, y, data) data1=data[0] data2=data[...] ... ... result = ...x...y...data1...data2...
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.
scipy
假设参数在一个数组中。可以定义辅助函数:
def helper(xy):
return func(xy[0], xy[1], data)
并使用优化。fmin
将其最小化:
optimize.fmin(helper, np.array([x0, y0]), ...)
我在SciPy的书中找到了答案!我只是不习惯文档中的编程“行话”。。。(尽管文档对我这样的新手非常有用) 因此,方法如下:
- 与其像我的问题中那样定义函数(要最小化),不如将其定义为
- 现在,
函数应该是optimize.fmin
x0
(初始猜测)提供给optimize.fmin
函数时,它就会知道它将必须使用x0
的“大小”优化数组。函数中需要的所有其他数据都必须在tupleargs
中给出(在本例中,tupleargs
中只有一个数组,但它可以是args=(data1,data2,…)
,在这种情况下,不需要在函数中解包)
摘要:最初的猜测
x0
只是一个数组;额外的参数args
只是一个元组;函数应该(字面上!)定义为deffunc(x,*args)
;数组x
和元组args
可以在函数中“解包”(使用y=x[0]
,z=x[1]
,…和data1=args[0]
,data2=args[1]
,…)。谢谢!我设法解决了这个问题,并试图回答我自己的问题,但“声誉低于10的用户在提问后8小时内无法回答他们自己的问题”。我明天会发布答案。次要的一点,但我认为你在上面对func的定义中是指data1=args[0],data2=args[…]。
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(func, x0=[y_estimate, z_estimate], args=(data))