提问人:Iksy97 提问时间:1/19/2023 更新时间:1/19/2023 访问量:32
在同一类函数中的另一个方法中调用方法
Calling a method inside another method within the same class function
问:
我正在尝试校准一个模型,该模型内部有 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,
答:
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 仍然不起作用
评论