2017-01-05 52 views
2

我正在閱讀SciPy文檔並與Python一起玩,看看我是否可以實現他們談論的內容。但是,我似乎無法弄清楚下面的代碼中發生了什麼。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]。

最終如何給出5個結果數組?當然,最小化函數只運行四次,每次都有一對值(分別取自x [1:]和x [: - 1])?

將兩個變量的值存儲在兩個不同的數組中是不是更有意義?

對不起,如果我錯過了一些相當明顯的事情,並提前感謝。

V

+0

你是什麼意思的「第一個變量」和「第二個變量」?只有一個參數傳遞給'rosen'。它對這個論點所做的是它自己的事情。 – BrenBarn

回答

2

rosen被寫入接受x幾乎任何長度的,並返回一個值,該sum一種方式。像x[1:]-x[:-1]這樣的表達式只是取決於連續項之間的差異。

minimize本身需要x0,一個1d數組,這裏有5個元素長。它會改變所有元素,直到rosen總和最小。所以它最小化了一個矢量或一維數組。它看起來像x0可能有不同的長度,從(2,)

0

通過SciPy的實現的羅森伯格功能不是經常使用的功能

formula

但似乎相當是generalized Rosenberg function

another

更高的尺寸。因此,x[1:]x[:-1]不是索引兩個維度(x,y),而是以便利的方式實現上述功能。

一個注hpaulj的回答是:不一定會輸出一個值,作爲一個每個人都可以做

from scipy.optimize import rosen 
points = np.array([[1, 1, 1, 1], [1, 2, 3, 4]]).T 
rosen(points) 

--> array([ 0., 2705.]) 

在一次評估它的多個輸入向量。