【发布时间】:2017-01-05 03:17:23
【问题描述】:
我正在阅读 SciPy 文档并使用 Python 来看看我是否可以实现他们谈论的内容。但是我似乎无法弄清楚下面的代码中发生了什么。
来自https://docs.scipy.org/doc/scipy-0.18.1/reference/tutorial/optimize.html
>>> def rosen(x):
... """The Rosenbrock function"""
... return sum(100.0*(x[1:]-x[:-1]**2.0)**2.0 + (1-x[:-1])**2.0)
>>> x0 = np.array([1.3, 0.7, 0.8, 1.9, 1.2])
>>> res = minimize(rosen, x0, method='nelder-mead',
... options={'xtol': 1e-8, 'disp': True})
Optimization terminated successfully.
Current function value: 0.000000
Iterations: 339
Function evaluations: 571
>>> print(res.x)
[ 1. 1. 1. 1. 1.]
在这种情况下,Rosenbrock 函数似乎为第一个变量采用大小为 4 的数组,为第二个变量采用大小为 4 的数组。这是因为 x[1:] 和 x[:-1] 一样被使用。
这最终如何给出一个包含五个结果的数组?肯定会最小化函数只运行四次,每次都有一对值(分别取自 x[1:] 和 x[:-1])?
另外,将两个变量的值存储在两个不同的数组中不是更有意义吗?
抱歉,如果我遗漏了一些非常明显的内容,请提前致谢。
V
【问题讨论】:
-
“第一个变量”和“第二个变量”是什么意思?只有一个参数被传递给
rosen。它对这个论点的作用是它自己的事。
标签: python numpy optimization scipy