Python 优化时的模糊元素,fmin_powell
我在使用fmin_-powell方法优化参数时遇到了一个问题Python 优化时的模糊元素,fmin_powell,python,scipy,Python,Scipy,我在使用fmin_-powell方法优化参数时遇到了一个问题 coeff = np.array([1.,1.,1.,1.]) def run(coeff, *func): if np.any(coeff < 0): return (np.minimum(coeff, 0)**2 + 1) * 100000000.0 else: [some math operations] return Energy def optimize(
coeff = np.array([1.,1.,1.,1.])
def run(coeff, *func):
if np.any(coeff < 0): return (np.minimum(coeff, 0)**2 + 1) * 100000000.0
else:
[some math operations]
return Energy
def optimize(f):
return opt.fmin_powell(run, coeff, args=(f,f), disp=0)
f = ['1a','2b','3c', '4d', '5e', '6e', '7f', '8g']
p = Pool(processes=8)
async_ret = p.map(optimize,f,chunksize=1)
result = async_ret.get()
p.terminate()
我认为问题出在这行:如果np.any(coeff<0):返回(np.minimum(coeff,0)**2+1)*100000000.0
,但是,我没有注意到错误
有人知道问题在哪里吗 在我这方面,这个代码是有效的。。。我看不出你的错误。但是async_ret.get()失败,因为map的输出是一个列表,而列表没有get()方法……当在需要标量布尔值的上下文中使用布尔数数组时,会产生此错误。
if
语句是最明显的和
表达式也有问题(Python和
短路),您的代码可能在错误的位置生成数组,但错误出现在多处理
中。挖那里。
async_ret = p.map(optimize,f,chunksize=1)
File "/apps/anaconda/lib/python2.7/multiprocessing/pool.py", line 251, in map
return self.map_async(func, iterable, chunksize).get()
File "/apps/anaconda/lib/python2.7/multiprocessing/pool.py", line 567, in get
raise self._value
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()