能否使用Scipy minimizer最小化依赖两个不同长度1D数组的函数
Scipy minimize优化多长度数组参数的实现说明
结论
你设想的调用写法不正确,无法正常运行。
错误原因
scipy.optimize.minimize要求传入的初始参数x0必须是一维类数组结构,你传入的[x,y]是包含两个不同长度一维数组的列表,无法被接口正确解析为待优化的参数向量。
正确实现方案
你需要将所有待优化参数打平拼接为单个一维向量,再在目标函数内按预设长度拆分回对应形状的数组即可,示例实现如下:
步骤1:预处理初始参数
import numpy as np from scipy.optimize import minimize # 原始初始值 x_init = np.array([1,2,3,1,52,5]) y_init = np.array([4,8,9]) # 记录两个数组的长度,用于后续拆分 x_len = len(x_init) y_len = len(y_init) # 拼接为一维初始参数向量 init_params = np.concatenate([x_init, y_init])
步骤2:改写目标函数
def fun(params): # 从一维参数向量中拆分出x、y x = params[:x_len] y = params[x_len:] # 此处替换为你原本依赖x、y的损失计算逻辑即可 return np.sum(x**2) + np.sum(y**2)
步骤3:调用minimize执行优化
res = minimize(fun, init_params, method="Powell", tol=1e-3) # 优化完成后拆分得到最优的x、y opt_x = res.x[:x_len] opt_y = res.x[x_len:]
内容的提问来源于stack exchange,提问作者walid
相关产品推荐
相关产品推荐

