【问题标题】:Minimizing a function that depends on two arrays最小化依赖于两个数组的函数
【发布时间】:2021-10-06 21:55:13
【问题描述】:

是否可以使用 Scipy 最小化器最小化依赖于两个数组的函数 fun(x,y)

(x和y是两个不同长度的一维数组,例如x=np.array([1,2,3,1,52,5])y=np.array([4,8,9])

我正在考虑类似的事情:

minimize(fun, [x,y], method="Powell", tol=1e-3)

这是正确的方法吗?

谢谢。

【问题讨论】:

  • “取决于”是什么意思?
  • 你想将哪些对传递给函数?
  • @KarlKnechtel 我的意思是将 x 和 y 作为输入
  • @tobias 如果我理解你的话:我想要 x 和 y
  • 阅读minimize 的期望。如有必要,请尝试接近给定示例的内容,并远离它。

标签: python scipy minimize scipy-optimize scipy-optimize-minimize


【解决方案1】:

定义一个函数,显示minimize 提供的参数及其形状:

In [300]: def fun(x):
     ...:     print(x, x.shape)
     ...:     return np.sum(x)**2
     ...: 
     ...: 

使用二维数组调用最小化:

In [301]: minimize(fun, np.arange(6).reshape(2,3))
[0. 1. 2. 3. 4. 5.] (6,)
[1.49011612e-08 1.00000000e+00 2.00000000e+00 3.00000000e+00
 4.00000000e+00 5.00000000e+00] (6,)
[0.         1.00000001 2.         3.         4.         5.        ] (6,)
[0.         1.         2.00000001 3.         4.         5.        ] (6,)
[0.         1.         2.         3.00000001 4.         5.        ] (6,)
[0.         1.         2.         3.         4.00000001 5.        ] (6,)
[0.         1.         2.         3.         4.         5.00000001] (6,)
....

请注意,最初的 x0 (2,3) 已被分解为 (6,)。

我想你是从那里拿来的。

【讨论】:

  • 感谢您的回答。从函数fun(x) 的示例中,我猜最小化器不接受将两个数组作为输入的函数。因为对我来说重要的是我的函数应该以 x & y 作为输入。是否有另一个允许此功能的最小化程序?否则,我会尝试编辑我的函数。
  • 您可以使用x0=np.hstack((x,y)) 并在函数内部将x 分成两部分。虽然 minimizex 视为一维值数组,但您的函数不必以这种方式看待它。
猜你喜欢
  • 1970-01-01
  • 2018-10-06
  • 2015-12-31
  • 2017-05-09
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多