我对python很新,我对此感到困惑:
我想使用scipy.optimize.minimize
来最大化函数,并且我对我定义的函数的额外参数有一些问题。
我寻找了大量已回答问题的解决方案,但我无法找到解决问题的方法。 我在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:解包需要3个以上的值
但是,我无法看到我所缺少的论点。该函数似乎工作正常,所以我猜问题是在optimize.minimize
调用?
答案 0 :(得分: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]
)。 min_pears_function
传递给a
。 你的意思是以exp
传递吗?你想要解决的是exp
吗?在这种情况下,请将签名重新定义为:
def min_pears_function(exp, a):
...