2016-10-10 90 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

相关问题