python - 在多个参数上使用 scipy minimize 时将常量参数传递给函数

标签 python scipy

我有一个最小二乘误差函数(基于另一个函数),我想将其最小化(基本上是为了获得全局最小化曲线拟合),它看起来像这样:

def err(a, b, X, Y):
    return np.sum((f(a, b, X)-Y)**2)

Xf 点的数组被评估,取决于参数 ab , 和 Y作为 X 中定义的点的“基本事实” .

现在根据我在问题中找到的2520648231388319语法应如下所示:

Xc = np.array([1.0, 2.0, 3.0, 4.0, 5.0])   # points at which to evaluate error function
Yc = np.array([0.2, 0.4, 0.8, 0.12, 0.15]) # ground truth
g0 = np.array([1.0, 3.0])                  # initial guess for a and b    
res = scipy.optimize.minimize(err, g0, args=(Xc, Yc), method="Powell")

不幸的是,我收到以下错误消息:

TypeError: err() takes exactly 4 arguments (3 given)

如果我删除 XcYc从元组中,给出的参数数量减少了,所以我怀疑它在 g0 的定义中的某个地方。 ,因为这似乎传递给了 err作为单个参数。

如何调用 minimize如果我有多个用于优化的参数和我想在优化期间传递给我的函数的附加“常量”参数,是否正确?

最佳答案

minimize 只操作一个参数,但这可以是一个数组。你要做的是从 err 中的第一个参数中提取 ab:

def err(p, X, Y):
    a, b = p
    return np.sum((f(a, b, X)-Y)**2)

关于python - 在多个参数上使用 scipy minimize 时将常量参数传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45326876/

相关文章:

python - 哪个是最推荐的 Python Twitter 库,用于以编程方式更新我自己的 Twitter 流?

python - 使用 getattr [ python ] 在实例上调用方法

python - 寻找行减少矩阵python的解决方案

python - Scipy griddata 在循环/内存泄漏中不起作用

python - 如何有效地从稀疏矩阵中删除列?

Python Jupyter 安装 line_profiler 失败

python - 如何从 PyCharm 中的 Bash 调用的 Python 2.7 脚本进行打印?

python - 无法在 CPanel 上上传媒体文件(使用 django)

python - numpy.square 返回稀疏矩阵的错误结果

python - 高斯与 scipy.optimize.curve_fit 在 python 中的拟合结果错误