在同一类函数中的另一个方法中调用方法

Calling a method inside another method within the same class function

提问人:Iksy97 提问时间:1/19/2023 更新时间:1/19/2023 访问量:32

问:

我正在尝试校准一个模型,该模型内部有 12 个未知参数,并且只有 5 个输入。我正在为它构建一个类,例如:

class model:

def __init__(self,input_1,input_2,input_3,...):
    self.input_1=input_1
    self.input_2=input_2
    self.input_3=input_3
    .
    . 
    . #Only inputs here, no pmts
Then I've defined the functions as:

def integral(self, input_1, pmt1, pm2, pm3.... )

integral,err= quad(f(input,pmt1,pmt2,pmt3)) #I'm simplifying here, the function is longer

    return integral


def model_price(self,input_1,input_2,input_3):

     price = pm3 + self.integral(self)/input_3

   return price

def loss_function(self):

   err = (self.input_1 - self.model_price)
   pen = 0 

   return err + pen


def minimization(self,x0,bnds):

 params = {"pm1": {"x0": 0.0746, "lbub": [1e-4,4.9]},  #1
              "pmt2": {"x0": 0.3369, "lbub": [1e-4,4]}, #2
              "pm3": {"x0": 0.3369, "lbub": [1e-4,4]}, #3
                  ....
           }

    x0 = [param["x0"] for key, param in params.items()]
    bnds = [param["lbub"] for key, param in params.items()]
    results =minimize(self.loss_function(), x0, tol = 1e-3, method='SLSQP', options={'maxiter': 1e3 }, bounds=bnds)
            
    return results
        

当我尝试使用时,我尝试在函数之外传递 x0 和边界,但没有工作。我总是得到:

TypeError: integral() missing 12 required positional arguments: 'pmt1, pmt2, pmt3,
python-3.x 方法 嵌套 scipy-optimize-minimize

评论


答:

0赞 dbor 1/19/2023 #1

错误消息非常清楚,您正在尝试使用单个参数调用方法,并且需要传递 12 个参数。integral

所以而不是你需要self.integral(self) self.integral(arg1, … , arg12)

评论

0赞 Iksy97 1/19/2023
感谢您的回答,但实际上我正在尝试校准这些参数,因此我只知道它们可能所在的范围和初步猜测。有什么解决办法吗?
0赞 dbor 1/19/2023
您是否尝试使用“*args”book.pythontips.com/en/latest/args_and_kwargs.html 这将帮助您传递参数的动态列表
0赞 Iksy97 1/21/2023
即使使用 **args 仍然不起作用