Python -scipy: ошибка при преобразовании кода в функцию - PullRequest
0 голосов
/ 31 марта 2020

У меня есть следующий код (из кулинарной книги scipy), чтобы подогнать круг к траектории:

def calc_R(xc, yc):
    """ calculate the distance of each data points from the center (xc, yc) """
    return np.sqrt((x-xc)**2 + (y-yc)**2)

def f_2b(c):
    """ calculate the algebraic distance between the 2D points and the mean circle centered at c=(xc, yc) """
    Ri = calc_R(*c)
    return Ri - Ri.mean()

def Df_2b(c):
    """ Jacobian of f_2b
    The axis corresponding to derivatives must be coherent with the col_deriv option of leastsq"""
    xc, yc     = c
    df2b_dc    = np.empty((len(c), x.size))

    Ri = calc_R(xc, yc)
    df2b_dc[0] = (xc - x)/Ri                   # dR/dxc
    df2b_dc[1] = (yc - y)/Ri                   # dR/dyc
    df2b_dc    = df2b_dc - df2b_dc.mean(axis=1)[:, np.newaxis]

    return df2b_dc

x = x_dat[list(np.array(track))] #the x-coordinates of the trajectory: obtained from another np array defined elsewhere in the code 
y = y_dat[list(np.array(track))]
x_m = np.mean(x)
y_m = np.mean(y)

center_estimate = x_m, y_m
center_2b, ier = optimize.leastsq(f_2b, center_estimate, Dfun=Df_2b, col_deriv=True)

xc_2b, yc_2b = center_2b
Ri_2b        = calc_R(*center_2b)
R_2b         = Ri_2b.mean() #this is the value i need

Теперь я хочу преобразовать последние несколько строк кода как функцию, поэтому я сделал это:

def funct(track, x_dat, y_dat):
     x = x_dat[list(np.array(track))] #the x-coordinates of the trajectory: obtained from another np array defined elsewhere in the code 
     y = y_dat[list(np.array(track))]
     x_m = np.mean(x)
     y_m = np.mean(y)

     center_estimate = x_m, y_m
     center_2b, ier = optimize.leastsq(f_2b, center_estimate, Dfun=Df_2b, col_deriv=True)

     xc_2b, yc_2b = center_2b
     Ri_2b        = calc_R(*center_2b)
     R_2b         = Ri_2b.mean() #this is the value i need

     return R_2b

Теперь, когда я запускаю

R = funct(track, x_dat, y_dat) # the arguments are calculated in a different part of the code and supplied here

, я получаю сообщение об ошибке:

имя 'x' не определено

и прослеживается до функции calc_R.

Где я делаю ошибку? Извините за очень длинный пост.

...