2014-01-09 26 views
1

我正在使用Scipy.Optimize.fmin來查找函數的最大值。輸出的形式是numpy.ndarray,其中包含有關進程的其他信息。我只需要將x值作爲浮點數返回。如何從numpy.ndarray中提取值

def f(x): 
    """returns the value of f(x) with the input value x""" 
    import math 
    f = math.exp(-x ** 2.0)/(1.0 + x ** 2.0) + \ 
     2.0 * (math.cos(x) ** 2.0)/(1.0 + (x - 4.0) ** 2.0) 
    return f 

def find_max_f(): 
    """returns the x for which f(x) takes the maximum value""" 
    import scipy.optimize as o 
    m = o.fmin(lambda x: -f(x), 0) 
    return m 

這是它返回:

>>> find_max_f() 
Optimization terminated successfully. 
    Current function value: -1.118012 
    Iterations: 12 
    Function evaluations: 24 
array([ 0.0131875]) 

我只需要標記陣列括號內的最終數目

+0

'fmin()'的返回類型是什麼?如果它是可迭代的,你可以使用索引來獲取它。 – IanAuld

回答

1

只不過是結果的東西結合,然後你可以索引中的第一元素如果它是一個列表或元組:

>>> xopt = find_max_f() 
Optimization terminated successfully. 
     Current function value: -1.118012 
     Iterations: 12 
     Function evaluations: 24 
>>> xopt 
array([ 0.0131875]) 
>>> xopt[0] 
0.013187500000000005 
>>> type(xopt[0]) 
<type 'numpy.float64'> 

我建議你閱讀NumPy Tutorial,特別是「索引,切片和迭代」部分。

+1

您可能還想提起拆箱。例如。 ''xopt,= find_max_f()'(或'm,= o.fmin(...)'在'find_max_f'裏面。)它讓很多新手感到困惑,但這是一個常見的習慣用法,所以它可能對OP也可以看到它。 –

+1

我想你剛剛做到了。 :^)不能很好地解釋爲什麼我不使用這種模式,但我從來沒有在我自己的代碼中使用它。 – DSM