我试图最小化依赖于函数的值(并因此优化函数的参数),因此后者匹配一些实验数据。
问题是,我实际上并不知道我是否正确编码了我想要的内容,或者即使我使用了正确的函数,因为我的程序给了我一个错误。
import scipy.optimize as op
prac3 = pd.read_excel('Buena.xlsx', sheetname='nl1')
print(prac3.columns)
tmed = 176
te = np.array(prac3['tempo'])
t = te[0:249]
K = np.array(prac3['cond'])
Kexp = K[0:249]
Kinf = 47.8
K0 = 3.02
DK = Kinf - K0
def f(Kinf,DK,k,t):
return (Kinf-DK*np.exp(-k*t))
def err(Kexp,Kcal):
return ((Kcal-Kexp)**2)
Kcal = np.array(f(Kinf,DK,k,t))
print(Kcal)
dif = np.array(err(Kexp,Kcal))
sumd = sum(dif)
print(sumd)
op.minimize(f, (Kinf,DK,k,t))
程序给我的错误如下:
ValueError Traceback (most recent call last)
<ipython-input-91-fd51b4735eed> in <module>()
48 print(sumd)
49
---> 50 op.minimize(f, (Kinf,DK,k,t))
51
52
~/anaconda3_501/lib/python3.6/site-packages/scipy/optimize/_minimize.py in minimize(fun, x0, args, method, jac, hess, hessp, bounds, constraints, tol, callback, options)
352
353 """
--> 354 x0 = np.asarray(x0)
355 if x0.dtype.kind in np.typecodes["AllInteger"]:
356 x0 = np.asarray(x0, dtype=float)
~/anaconda3_501/lib/python3.6/site-packages/numpy/core/numeric.py in asarray(a, dtype, order)
529
530 """
--> 531 return array(a, dtype, copy=False, order=order)
532
533
ValueError: setting an array element with a sequence.
答案 0 :(得分:0)
例外情况表明您将数组传递给期望可调用的数组。如果没有看到你的追溯或者更多地了解你正在尝试做什么,我只能猜测这发生了什么,但我的猜测就在这里:
op.minimize(f(Kinf,DK,k,t),sumd)
从the docs开始,第一个参数是可调用的(函数)。但是你作为第一个参数传递了任何f(Kinf,DK,k,t)
返回值。并且,查看您的f
函数,它看起来像是返回一个数组,而不是函数。
我的第一个猜测是你希望最小化f
而不是(Kinf, DK, k, t)
?如果是这样,你将f
作为函数传递,将元组(Kinf, DK, k, t)
作为args传递,如下所示:
op.minimize(f, sumd, (Kinf,DK,k,t))