Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Scipy最小化fmin-语法问题_Python_Optimization_Scipy_Minimize - Fatal编程技术网

Python 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...

我有一个函数,它接受多个参数(一个数组和两个浮点),并返回一个标量(浮点)。 现在我想通过改变两个参数来最小化这个函数:两个浮点数。 数组在函数内部“解包”,然后使用其内容(数组和浮点)

如何使用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.

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
的“大小”优化数组。函数中需要的所有其他数据都必须在tuple
args
中给出(在本例中,tuple
args
中只有一个数组,但它可以是
args=(data1,data2,…)
,在这种情况下,不需要在函数中解包)


摘要:最初的猜测
x0
只是一个数组;额外的参数
args
只是一个元组;函数应该(字面上!)定义为def
func(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))