Python scipy.brute VALUERROR:使用序列设置数组元素

Python scipy.brute VALUERROR:使用序列设置数组元素,python,python-2.7,scipy,maximize,Python,Python 2.7,Scipy,Maximize,我对scipy.brute有一个问题,我用这种方式设置最大化 import numpy as np from scipy.optimize import brute from scipy.optimize import fmin from scipy.stats import norm lambmarket=np.array([1.1076, 0.0615, 0.15238, 0.16265, 0.1761301, 0.193762, 0.0778772, 0.079162, 0.07505

我对scipy.brute有一个问题,我用这种方式设置最大化

import numpy as np
from scipy.optimize import brute
from scipy.optimize import fmin
from scipy.stats import norm 

lambmarket=np.array([1.1076, 0.0615, 0.15238, 0.16265, 0.1761301, 0.193762, 0.0778772, 0.079162, 0.07505194, 0.071973])
xnew = np.array([0.5, 1.0, 2.0, 3.0, 4.0, 5.0, 7.0, 10.0, 20.0, 30.0])

def optimization(key):
    if key=='inc':
         ranges=slice(0,2,0.2), slice(0.001,2.998,0.5)
         finalB =brute(incmse, ranges, full_output=True,finish=None, disp=True)
         finalA=fmin(incmse, finalB[0], xtol=0.001, ftol=0.001, maxiter=500, maxfun=500)

    return finalA
在哪里

它可以通过以下方式执行:

 optimization('inc')
(lambmarket和xnew是全球性的) 从照片上我知道错误是在所有暴力迭代完成之后出现的……有人能解释我吗

(我寻找类似的线程,并试图自己解决,但我仍然不明白问题是什么)

完全错误输出

param=optimization(key)
File "/home/myway/calibration.py", line 129, in optimization
finalB =brute(incmse, ranges, full_output=True,finish=None, disp=True)
File "/usr/lib/python2.7/dist-packages/scipy/optimize/optimize.py", line 2542, in brute
Jout = vecfunc(*grid)
File "/usr/lib/python2.7/dist-packages/numpy/lib/function_base.py", line 1573, in __call__
return self._vectorize_call(func=func, args=vargs)
File "/usr/lib/python2.7/dist-packages/numpy/lib/function_base.py", line  1643, in _vectorize_call
copy=False, subok=True, dtype=otypes[0])
ValueError: setting an array element with a sequence.

正如cel所指出的,问题只是我(不可理解地)返回了一个向量而不是一个值,函数incmse必须修改如下

def incmse(*p):

     v, sigma =p[0]
     print v,sigma

     msqdiff=[(( lambmarket[t]  - s_t(0.,xnew[t], v, 0.003, sigma) )**2)  for t in range(0,len(xnew))]

     print sum(msqdiff)
     return sum(msqdiff)

现在,根据需要将一个值传递给scipy.optimize.brute,以使其正常工作。

请将此值转换为一个值。例如,我们不知道什么是
lambmarket
。经过编辑后,现在仍然有未定义的变量。(例如,
xnew
r
返回msqdiff
应该是
返回和(msqdiff)
,对吗?否则您将返回一个向量。很高兴您解决了它。你可能想发布一个解释问题和解决方案的答案。当您第一次看到这个错误时,很难找出它。
def incmse(*p):

     v, sigma =p[0]
     print v,sigma

     msqdiff=[(( lambmarket[t]  - s_t(0.,xnew[t], v, 0.003, sigma) )**2)  for t in range(0,len(xnew))]

     print sum(msqdiff)
     return sum(msqdiff)