Проблема с позиционными аргументами и функциями

Я использую scipy.odr для анализа трех наборов данных, и я совершенно не понимаю, как отладить эту конкретную проблему. Когда я запускаю это, он сообщает мне, что моя функция *thin_lens1()* принимает один позиционный аргумент, но эти два были заданы. Я перепробовал кучу перестановок и до сих пор не понимаю, что я сделал не так, поскольку единственный аргумент, который принимает *thin_lens1()*, - это p1. Любая помощь, которую кто-то может оказать, будет принята с благодарностью, так как я полностью застрял здесь.

import numpy as np
import matplotlib.pyplot as plt
import scipy
import scipy.odr, scipy.special, scipy.stats


#importing data & defining focus length constants

p1,q1,up1,uq1,p2,q2,up2,uq2,p3,q3,up3,uq3 = 
np.loadtxt('lenses_data_processed.txt', 
                                     comments='#', unpack=True, 
usecols = range(0,12))

f1 = 158.695


#defining thin lens equation

def thin_lens1(p1):
    return (p1-f1)/(p1*f1)

#parameter guesses
p_guess = [1, 2]

#applying ODR
fit = scipy.odr.Model(thin_lens1)
mydata= odr.RealData(p1, q1, sx=up1, sy=uq1)
myodr = odr.ODR(mydata, fit, beta0 = p_guess, maxit=500)
myoutput = myodr.run()
myoutput.pprint()

Что такое p1? Сверьте с типом (p1).

fstop_22 26.10.2018 04:20

Первый аргумент scipy.odr.Model() должен быть функцией с двумя аргументами.

Klaus D. 26.10.2018 04:26

Что такое p1?

fstop_22 26.10.2018 04:33

type (p1) - это numpy.ndarray.

user10560694 26.10.2018 04:42

Я также попытался преобразовать p1 из массива numpy в обычный список, но все равно получил ту же ошибку.

user10560694 26.10.2018 04:48

Еще раз взгляните на документация; вы можете неправильно понять, как работает код odr. В примере в разделе «Базовое использование» этой ссылки (и в документация Model) вы увидите, что функция модели (то есть f в примере, thin_lens1 в вашем коде) должна принимать два аргумента: параметры модели. , и массив значений x. Учитывая эти значения, он должен вернуть значения функции y.

Warren Weckesser 26.10.2018 05:08
0
6
39
0

Другие вопросы по теме