我知道有很多与我类似的帖子,但我真的无法将它们应用到我的情况,所以请我请求你的帮助。基本上,我的代码如下:
def Black_min(f, k, ann, vol, ex, cp):
d1=(math.log(f/k)+0.5*vol**2*ex)/math.sqrt(vol**2*ex)
d2=(math.log(f/k)-0.5*vol**2*ex)/math.sqrt(vol**2*ex)
Price=cp*(f*norm.cdf(cp*d1)-k*norm.cdf(cp*d2))*ann*20000
return Price
banana = lambda x: (Price_Cube[0][4]-Black_min(F[0], K[0][4], Annuity[0], x, Expiry[0], CP[4]))**2
xopt, fopt = scipy.optimize.fmin(func=banana, x0=[Vol_Cube[0][0]], disp=False)
Price_Cube、K 是内部有数字的列表的列表,Annuity、Expiry 和 CP 只是列表。当我运行代码时,我得到了这个。
xopt, fopt = scipy.optimize.fmin(func=banana, x0=[Vol_Cube[0][0]], disp=False)
ValueError: need more than 1 value to unpack
我知道这是一个愚蠢的错误,但我真的不明白。感谢任何帮助,提前致谢。
最佳答案
问题是您尝试将 fmin
的返回值分配给两个变量,xopt
和 fopt
,但默认情况下 fmin
仅返回 xopt
。你应该尝试一下
xopt = scipy.optimize.fmin(func=banana, x0=[Vol_Cube[0][0]])
如果您还希望函数值最小,则必须将 full_output
设置为 True
,然后您还可以获得更多诊断信息:
xopt, fopt, iter, funccalls, warnflags = scipy.optimize.fmin(func=banana, x0=[Vol_Cube[0][0]], full_output=True)
关于python - scipy.optimize.fim错误: need more than 1 value to unpack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46524524/