lmfit 中的位置参数不能是 SciPy CubicSpline 数据类型

Positional arguments in lmfit cannot be SciPy CubicSpline datatype

提问人:Elijah 提问时间:7/26/2023 最后编辑:Elijah 更新时间:7/26/2023 访问量:37

问:

问题:
如果我插入 lmfit 的位置参数数组是从 获得的。
minimize()scipy.interpolate.CubicSpline

我收到以下错误:

TypeError: unsupported operand type(s) for *: 'CubicSpline' and 'float'

该操作用于我的模型函数中,我将位置参数数组 () 与拟合参数 () 相乘,如下所示。基本上,lmfit 认为 () 是一种类型,即使它是一个浮点数组。*xpars['a']x_listCubicSpline

我的代码

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)
x_list = scpi.CubicSpline(A, B)

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)
coeff = minimize(model, 
                 fit_params, 
                 args=(x_list(A),), 
                 kws={'data': y_list}, #cut off distance
                 method='basinhopping', 
             )

这是我到目前为止尝试过的:

  • type(x_list)显示它是一个浮点数数组
  • x_list*0.1在单元格中工作
  • 类型转换为浮点数组并不能解决问题:x_listx_list = np.asarray([float(j) for j in x_list])
蟒蛇 scipy lmfit

评论

1赞 jared 7/26/2023
什么是和?在哪里使用?ABlmfit
0赞 Elijah 7/26/2023
A 和 B 是从前面的计算中获得的数据数组。最终,我希望将先前数据的拟合转换为模型函数的 x 数据。(A 和 B 可以是任何数据)。lmfit 用于函数 Parameters() 和 minimize()。
1赞 hpaulj 7/26/2023
之后是“CubicSpline”,如错误所示。阅读文档,了解您可以用它做什么。 产生错误。x_list = scpi.CubicSpline(A, B)x_listx_list*1.

答:

1赞 ev-br 7/26/2023 #1

Your 不是一个列表,而是一个 CubicSpline 对象。x_list