Python/Scipy "invalid index to scalar variable"

标签 python optimization numpy scipy

我正在使用 Scipy 优化模块,特别是 fmin_tncfmin_l_bfgs_b。但是,在使用其中任何一个时,我都收到消息“IndexError:标量变量的无效索引”。

这个错误的原因是什么?

这个错误信息是什么意思?

我的练习代码:

def f01(para):
    para1, para2 = para
    return 1+ (para1 -1)**2 + (para2 -2)**2

para0 = np.array([10, 10]) 
mybounds = [(-40,30),(-20,15)]

opt.fmin_l_bfgs_b(f01, para0,  bounds = mybounds )

哪个返回:

Traceback (most recent call last):
  File "C:\Python27\mystuff\practice_optimize01.py", line 78, in <module>
    opt.fmin_l_bfgs_b(f01, para0,  bounds = mybounds )

  File "C:\Python27\lib\site-packages\scipy\optimize\lbfgsb.py", line 174, in fm
in_l_bfgs_b
**opts)

  File "C:\Python27\lib\site-packages\scipy\optimize\lbfgsb.py", line 294, in _m
 inimize_lbfgsb
    f, g = func_and_grad(x)

  File "C:\Python27\lib\site-packages\scipy\optimize\lbfgsb.py", line 249, in fu
nc_and_grad
    f = fun(x, *args)

  File "C:\Python27\lib\site-packages\scipy\optimize\optimize.py", line 55, in _
_call__
    self.jac = fg[1]
IndexError: invalid index to scalar variable.

Python 2.7.3,32 位。 NumPy 1.6.2。 科学 0.11.0b1。 Windows XP 和 Vista。

最佳答案

fmin_l_bfgs_b 期望您的函数返回函数值梯度。您只返回函数值。

如果您只返回函数值而不提供梯度,则需要设置 approx_grad=True 以便 fmin_l_bfgs_b 使用数值近似值。

请参阅文档字符串中的选项说明。

根据我对文档的阅读,fmin_tnc 在您的情况下具有相同的模式和相同的问题。

关于Python/Scipy "invalid index to scalar variable",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11963067/

相关文章:

python - 如何在 Django/Rest FrameworkWork 中修改 field_to_native

python - 正则表达式匹配大括号内的字符串

python - 在 Python 中使用矩阵向量乘法进行速度优化

Python - 尝试比较两个格式不同的文本文件

Python - 将包含实体引用的字符串显示为普通文本

php - MySQL 包含/排除帖子

algorithm - 影响n组的m个学生?

numpy - 计算 xarray 中每个网格点的百分位

python - 如何更改 python 中的错误消息?

python - 从两个类别列 pandas 创建一个类别列