【问题标题】:Scipy minimize fmin - problems with syntaxScipy 最小化 fmin - 语法问题
【发布时间】:2013-01-01 06:43:44
【问题描述】:

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

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

【问题讨论】:

    标签: python optimization scipy minimize


    【解决方案1】:

    scipy 假定参数在数组中。你可以定义一个辅助函数:

    def helper(xy):
        return func(xy[0], xy[1], data)
    

    并使用optimize.fmin 将其最小化:

    optimize.fmin(helper, np.array([x0, y0]), ...)
    

    【讨论】:

    • 谢谢!我设法对其进行了整理并尝试回答我自己的问题,但是“声誉低于 10 的用户在询问后 8 小时内无法回答自己的问题”。我明天会发布答案。
    【解决方案2】:

    我在 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 函数时,它就会知道它必须使用 @987654327 的“大小”来优化数组@。您在函数中需要的所有其他数据必须在元组args 中给出(在此示例中,元组args 中只有一个数组,但它可能是args=(data1, data2, ...),在这种情况下您不需要在函数中解压)。

    总结:最初的猜测x0只是一个数组;额外的参数args 只是一个元组;该函数应该(字面意思!)定义为def func(x, *args);数组x 和元组args 然后可以在函数内部“解包”(y=x[0]z=x[1]、...和data1=args[0]data2=args[1]、...)。

    【讨论】:

    • 次要问题,但我认为您的意思是 data1=args[0], data2=args[...] 在上面的 func 定义中。
    猜你喜欢
    • 1970-01-01
    • 2013-08-09
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 2013-12-03
    • 2017-04-11
    相关资源
    最近更新 更多