python - 传递的 `f0` 具有多于 1 个维度。- fmin_l_bfgs_b
问题描述
我想找到最小化函数的参数,但出现错误。到目前为止使用scipy.optimize.fmin
,但我想为每个参数添加边界。这是我的代码
def Kou_calibration_full():
i=0
global opt
p0 = spo.brute(Kou_error_function, ((0.10,0.31, 0.1),(0.01,2.6, 0.5), (0.1,0.92,0.2), (1.1,20,7),(0.1,20,7)), finish=None)
opt = spo.minimize(Kou_error_function, p0, bounds=((0.10,0.31),(0.01,2.6), (0.1,0.92), (1.1,20),(0.1,20)))
return opt
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<timed eval> in <module>
<ipython-input-127-e458cef75641> in Kou_calibration_full()
3 global opt
4 p0 = spo.brute(Kou_error_function, ((0.10,0.31, 0.1),(0.01,2.6, 0.5), (0.1,0.92,0.2), (1.1,20,7),(0.1,20,7)), finish=None)
----> 5 opt = spo.minimize(Kou_error_function, p0, bounds=((0.10,0.31),(0.01,2.6), (0.1,0.92), (1.1,20),(0.1,20)))
6 return opt
~\anaconda3\lib\site-packages\scipy\optimize\_minimize.py in minimize(fun, x0, args, method, jac, hess, hessp, bounds, constraints, tol, callback, options)
615 **options)
616 elif meth == 'l-bfgs-b':
--> 617 return _minimize_lbfgsb(fun, x0, args, jac, bounds,
618 callback=callback, **options)
619 elif meth == 'tnc':
~\anaconda3\lib\site-packages\scipy\optimize\lbfgsb.py in _minimize_lbfgsb(fun, x0, args, jac, bounds, disp, maxcor, ftol, gtol, eps, maxfun, maxiter, iprint, callback, maxls, finite_diff_rel_step, **unknown_options)
304 iprint = disp
305
--> 306 sf = _prepare_scalar_function(fun, x0, jac=jac, args=args, epsilon=eps,
307 bounds=new_bounds,
308 finite_diff_rel_step=finite_diff_rel_step)
~\anaconda3\lib\site-packages\scipy\optimize\optimize.py in _prepare_scalar_function(fun, x0, jac, args, bounds, epsilon, finite_diff_rel_step, hess)
259 # ScalarFunction caches. Reuse of fun(x) during grad
260 # calculation reduces overall function evaluations.
--> 261 sf = ScalarFunction(fun, x0, args, grad, hess,
262 finite_diff_rel_step, bounds, epsilon=epsilon)
263
~\anaconda3\lib\site-packages\scipy\optimize\_differentiable_functions.py in __init__(self, fun, x0, args, grad, hess, finite_diff_rel_step, finite_diff_bounds, epsilon)
93
94 self._update_grad_impl = update_grad
---> 95 self._update_grad()
96
97 # Hessian Evaluation
~\anaconda3\lib\site-packages\scipy\optimize\_differentiable_functions.py in _update_grad(self)
169 def _update_grad(self):
170 if not self.g_updated:
--> 171 self._update_grad_impl()
172 self.g_updated = True
173
~\anaconda3\lib\site-packages\scipy\optimize\_differentiable_functions.py in update_grad()
89 self._update_fun()
90 self.ngev += 1
---> 91 self.g = approx_derivative(fun_wrapped, self.x, f0=self.f,
92 **finite_diff_options)
93
~\anaconda3\lib\site-packages\scipy\optimize\_numdiff.py in approx_derivative(fun, x0, method, rel_step, abs_step, f0, bounds, sparsity, as_linear_operator, args, kwargs)
386 f0 = np.atleast_1d(f0)
387 if f0.ndim > 1:
--> 388 raise ValueError("`f0` passed has more than 1 dimension.")
389
390 if np.any((x0 < lb) | (x0 > ub)):
ValueError: `f0` passed has more than 1 dimension.
任何人都可以帮忙吗?我不知道该怎么办 :(
(我的代码太多,所以我必须添加一些文本:abcdabcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd
解决方案
可能是由于函数返回矩阵的维度Kou_error_function
、示例添加.ravel()
或.flatten()
函数返回的末尾。喜欢:
def Kou_error_function(x,obs,arg):
err = x*arg-obs
return y.ravel()
推荐阅读
- swift - 检查计时器是否完成
- graphql - GraphQL:游标是读取事务的一部分吗?轮询新数据
- php - 帖子不是随机排序的
- python - rdkit 使用 MolToFile() 生成两个不同的图像并在 Jupyter 中显示
- core-data - 如何使用 SwiftUI 在模态视图中创建 NSManagedObject?
- ruby-on-rails - Howler.js 通过 Rails ActionCable 从 websocket 播放音频
- node.js - NodeJS 文件系统
- imagemagick - 在imagemagick中裁剪图像时如何设置偏移量
- html - 为什么使用百分比时我的图像高度不起作用?
- php - 创建对多维数组键的动态可解析调用,使其不被逐字处理