首页 > 解决方案 > curve_fit 使调用 func 引发 IndexError

问题描述

我正在尝试使用curve_fit将函数TGp_xx中的参数eta_H拟合到某些数据(x_data,data_num_xx)。现在,下面的代码是我正在使用的代码的简化版本,它不会单独工作,但我希望这个问题足够概念化,即使从这个也可以理解

from scipy.optimize import curve_fit

Lx        = 150
y_cut     = 20

data = np.loadtxt("../dump/results.dat")

ux       = data[:,3]
ux       = np.reshape(ux       , (Ly, Lx))


def Par_x(x,y,vec):
    fdx = vec[(x+1)%Lx    , y]    
    fsx = vec[(x-1+Lx)%Lx , y]    

    return (fdx - fsx) / 2.0

def TGp_xx(x, eta_H): return 2*eta_H*Par_x(x,y_cut,ux)

x_data = np.arange(Lx, dtype=np.int)
data_num_xx  = np.empty(Lx, dtype='float64')  #this is just a placeholder

popt_xx, pcov_xx = curve_fit(TGp_xx, x_data, data_num_xx)

我得到一个在 Par_x 中引发的 IndexError:

fdx = vec[(x+1)%Lx    , y]    

IndexError:用作索引的数组必须是整数(或布尔)类型

我尝试了一些更简单的方法,比如在 curve_fit 之外调用 TGp_xx(x_data, some_constant),它可以工作。我真的不明白为什么在curve_fit中我得到IndexError,就好像我将一个浮点值(或一个浮点数组)作为x传递,不能用作索引。

标签: pythonscipyscipy-optimize

解决方案


推荐阅读