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

lmfit传入scipy CubicSpline生成数组报错问题排查

问题解决:TypeError: unsupported operand type(s) for *: 'CubicSpline' and 'float'

问题根源

你混淆了scipy.interpolate.CubicSpline的对象本身和它的计算结果:

  • scpi.CubicSpline(A, B)返回的是样条插值函数对象,不是浮点数组
  • 只有调用该对象(比如cs(A))才会得到插值后的浮点数组
  • 错误核心是你在minimize的args中可能误传了CubicSpline对象,而非其计算后的数组(尽管你提供的代码里写了x_list(A),但实际运行时大概率存在变量名混淆或笔误)

修正后的代码

import scipy.interpolate as scpi
import numpy as np
from lmfit import Parameters, minimize

A = np.linspace(0,1,100)
B = A**2 

y_list = np.linspace(1,100,100)
# 明确命名:cs是样条函数对象
cs = scpi.CubicSpline(A, B)
# 生成插值后的浮点数组
x_arr = cs(A)

def model(pars, x, data=None):
    model = x * pars['a']
    if data is None:
        return model
    return model - data

fit_params = Parameters()   
fit_params.add('a',  value=1., min=0.0, vary=True)
# args传入插值后的数组x_arr,而非样条对象cs
coeff = minimize(model, 
                 fit_params, 
                 args=(x_arr,), 
                 kws={'data': y_list},
                 method='basinhopping', 
             )

关键修正点

  • 分离样条对象和插值结果:用不同变量名区分(比如cs存对象,x_arr存数组),彻底避免混淆
  • 确保minimize的args参数传入的是浮点数组(x_arr),而非CubicSpline对象
  • 移除无效的强制类型转换:直接使用样条对象的调用结果即可得到数组,无需额外转换

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 09:05:55