2016-10-10 68 views
0

我對python非常陌生,而且我陷在這個問題上: 我想用scipy.optimize.minimize來最大化一個函數,我遇到了一些問題與我定義的函數的額外參數。ValueError:在使用optimize.minimize時需要超過3個值才能解壓縮。

我尋找了大量解答問題的解決方案,但找不到解決我問題的任何問題。 我在Structure of inputs to scipy minimize function中看到了如何傳遞一個額外的參數,使其在函數最小化時保持不變,從我的角度來看,我的代碼看起來很好。

這是我的代碼:

import numpy as np 
from scipy.stats import pearsonr 
import scipy.optimize as optimize 

def min_pears_function(a,exp): 
    (b,c,d,e)=a 
    return (1-(pearsonr(b + exp[0] * c + exp[1] * d + exp[2],e)[0])) 


a = (log_x,log_y,log_t,log_z) # where log_x, log_y, log_t and log_z are numpy arrays with same length 

guess_PF=[0.6,2.0,0.2] 

res = optimize.minimize(min_pears_function, guess_PF, args=(a,), options={'xtol': 1e-8, 'disp': True}) 

運行代碼時,我得到了以下錯誤:

ValueError: need more than 3 values to unpack

,但我看不出有什麼必要爭論我失蹤。該功能似乎工作正常,所以我想問題是在optimize.minimize調用?這裏發生

+0

這個'ValueError'在哪裏出現?給出更多的回溯或一個適當自包含的例子 – donkopotamus

+0

沒有完整的堆棧跟蹤它很難說,但我想如果你打印(一)在你的功能,你會發現一個= log_x,log_y,log_t和你的錯誤(b,c,d,e)= a –

回答

0

你的錯誤:

def min_pears_function(a,exp): 
    # XXX: This is your error line 
    (b,c,d,e)=a 
    return (1-(pearsonr(b + exp[0] * c + exp[1] * d + exp[2],e)[0])) 

這是因爲:

  • 傳遞給optimize.minimize初始值是guessPF它只有三個值([0.6,2.0,0.2])。
  • 該初始值作爲變量a傳遞給min_pears_function

你的意思是它被認爲是exp?你想解決的是exp嗎?在這種情況下,重新定義簽名爲:

def min_pears_function(exp, a): 
    ... 
+0

嗯..這是令人尷尬的..所以這只是一個有序變量的問題?謝謝donkopotamus! – aglaja

相關問題