2017-04-08 3 views
0

を最適化する際に呼び出すことはできません私は例外:「numpy.float64」オブジェクト

例外得続ける:関数を最小化しようとしたときに「numpy.float64」オブジェクトは、

呼び出すことはできません。

私は

def testLLCalc(): 
    mmc = MortalityModelCalibrator() 
    a = mmc.log_likelihood(2000, np.array([[0.6, 0.2, 0.8]])) 

として最小化しようとしているが、私は試してみて、私は上記の例外を取得

x0 = np.array([0, 0, 0]) 
res = minimize(-a[0], x0) 

を行うことによって、それを最小化するときに関数を呼び出すことができます。どんな助けもありがとう。完全なトレースバックは、次のとおりです。

Error 
Traceback (most recent call last): 
    File "C:\Program Files (x86)\JetBrains\WinPython-64bit-3.5.3.0Qt5\python-3.5.3.amd64\lib\unittest\case.py", line 59, in testPartExecutor 
yield 
    File "C:\Program Files (x86)\JetBrains\WinPython-64bit-3.5.3.0Qt5\python-3.5.3.amd64\lib\unittest\case.py", line 601, in run 
testMethod() 
    File "C:\Program Files (x86)\JetBrains\WinPython-64bit-3.5.3.0Qt5\python-3.5.3.amd64\lib\site-packages\nose\case.py", line 198, in runTest 
self.test(*self.arg) 
File "C:\Users\Matt\Documents\PyCharmProjects\Mortality\src\PennanenMortalityModel_test.py", line 57, in testLLCalc 
res = minimize(-a[0], x0) 
    File "C:\Program Files (x86)\JetBrains\WinPython-64bit-3.5.3.0Qt5\python-3.5.3.amd64\lib\site-packages\scipy\optimize\_minimize.py", line 444, in minimize 
return _minimize_bfgs(fun, x0, args, jac, callback, **options) 
    File "C:\Program Files (x86)\JetBrains\WinPython-64bit-3.5.3.0Qt5\python-3.5.3.amd64\lib\site-packages\scipy\optimize\optimize.py", line 913, in _minimize_bfgs 
gfk = myfprime(x0) 
    File "C:\Program Files (x86)\JetBrains\WinPython-64bit-3.5.3.0Qt5\python-3.5.3.amd64\lib\site-packages\scipy\optimize\optimize.py", line 292, in function_wrapper 
return function(*(wrapper_args + args)) 
    File "C:\Program Files (x86)\JetBrains\WinPython-64bit-3.5.3.0Qt5\python-3.5.3.amd64\lib\site-packages\scipy\optimize\optimize.py", line 688, in approx_fprime 
return _approx_fprime_helper(xk, f, epsilon, args=args) 
    File "C:\Program Files (x86)\JetBrains\WinPython-64bit-3.5.3.0Qt5\python-3.5.3.amd64\lib\site-packages\scipy\optimize\optimize.py", line 622, in _approx_fprime_helper 
f0 = f(*((xk,) + args)) 
    File "C:\Program Files (x86)\JetBrains\WinPython-64bit-3.5.3.0Qt5\python-3.5.3.amd64\lib\site-packages\scipy\optimize\optimize.py", line 292, in function_wrapper 
return function(*(wrapper_args + args)) 
Exception: 'numpy.float64' object is not callable 

答えて

0

scipyのダウンロードのminimizeは、最初の引数として呼び出し可能な機能を期待しています。

あなたはあなたの完全な、それはここだけで推測ゲームのコードが、この

res = minimize(-a[0], x0) 

の最初の要素が関数でなければならないことを意味しているを示さなかったので。この行を見て

:おそらく、スカラが返されるよう

a = mmc.log_likelihood(2000, np.array([[0.6, 0.2, 0.8]])) 

はそのようには見えません。

効果はシンプルです。scipyは、この引数を使ってこの関数をいくつかの引数(最初はx0)で呼び出しますが、引数にnumpy-arrayの値を呼び出します。

0

レビュードキュメントは:

minimize(fun, x0, args=(),... 
    fun : callable 
     Objective function. 
    x0 : ndarray 
     Initial guess. 
    args : tuple, optional 
     Extra arguments passed to the objective function and its derivatives 

あなたは '呼び出し可能' は何を知っていますか?これは関数(または同等のもの)です。fun(x0, arg0, arg1, ...)で何かを呼び出すことができます。

-a[0]は、numpy配列の要素であるaであることがわかります。

この機能を最小限に抑えようとしているのか、これがminimizeの一部であるのかは不明です。何も返さないので、aのソースにすることはできません。

def testLLCalc(): 
    mmc = MortalityModelCalibrator() 
    a = mmc.log_likelihood(2000, np.array([[0.6, 0.2, 0.8]])) 
    # return a ???? 

だから - 基本的なパイソンのご理解、「呼び出し可能な」が特に考えを見直します。そして、この関数の使い方をよく知るために、minimizeのサンプルを実行してください。

+0

log_likelihoodは、定義された関数です: 'DEF log_liklihood(自己、年、V): ミリメートル= self.create_mortality_model() mm.set_v(V) リターンmm.log_liklihood(self.populationData、self.deathRateData、年) '。以前は2スカラーのタプルを返していたので、なぜそれをインデックスしていたのですか?私は今、それらのうちの1つを削除して、ただ1つのスカラーを返すべきですが、それでもまだ動作していません。 –

+0

しかし、あなたはどのような機能を最小限に抑えていますか?スカラーやタプルではなく 'function'です。 – hpaulj

+0

さて、log_likelihood関数はスカラーを返す別の関数を返します。 –

関連する問題