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

u4vypkhs  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(72)

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

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

字符串
*运算在我的模型函数中使用,我将位置参数数组(x)与拟合参数(pars['a'])相乘,如下所示。基本上,lmfit认为(x_list)是CubicSpline类型,即使它是一个浮点数组。

我的编码

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_list类型转换为浮点数组并不能解决这个问题:x_list = np.asarray([float(j) for j in x_list])
uz75evzq

uz75evzq1#

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

相关问题