You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

scipy.curve_fit报错N=5不得超过M=2,M为何识别为2而非67

错误原因

scipy.optimize.curve_fit 默认将 ydata 的第一个维度长度判定为样本数M。你当前的ydata形状为(2, 67),第一个维度长度为2,因此触发了“待拟合参数数量5不能超过样本数2”的校验报错。
你设计的二维坐标输出的拟合逻辑没有问题,只是不符合curve_fit对输入形状的默认约定,调整输入形状即可正常运行。

两种可行解决方案
  • 方案一:调整维度适配新版scipy的多输出支持
    新版scipy的curve_fit已经支持多输出拟合,要求样本数为数组的最后一个维度,你只需要将ydata和elfunxy的输出调整为(样本数, 输出维度)的形状即可:
    # 调整ydata为(67, 2)形状,样本数为第一维度长度67
    ydata = xyrp[:, :2]
    # 调整elfunxy返回值形状,向量输入时返回(67,2),标量输入时返回(2,)
    def adjusted_elfunxy(phi, *params):
        return elfunxy(phi, *params).T
    popt, pcov = optimize.curve_fit(adjusted_elfunxy, xdata, ydata, p0=[centy,centx,mean*2,mean/2,0.3])
    
  • 方案二:展平输出兼容所有版本scipy
    不需要调整原有函数实现,直接将二维坐标展平为一维序列,总样本数变为134,完全满足5个参数的拟合要求:
    # 把ydata展平为一维,形状为(134,)
    ydata_flat = ydata.flatten()
    # 包装elfunxy,输出也对应展平
    def flat_elfunxy(phi, *params):
        return elfunxy(phi, *params).flatten()
    popt, pcov = optimize.curve_fit(flat_elfunxy, xdata, ydata_flat, p0=[centy,centx,mean*2,mean/2,0.3])
    

内容的提问来源于stack exchange,提问作者Axel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:57:06