我正在写这样一个类(简化)来表示概率分布。 我想要的只是初始化对象分布只有它的类型和参数,并且它有一些根据它的类型分配的函数。类定义中的类型错误
functions = {'exp':{
'parameters': ['l'],
'pdf': lambda x,p: exp(x/p[0])*p[0],
'cdf': lambda x,p: 1-exp(x/p[0]) },
'uniform':{
'parameters': ['x1','x2'],
'pdf': lambda x,p: 1/(p[1]-p[0]),
'cdf': lambda x,p: (x-p[0])/(p[1]-p[0]) }
}
class Distribution:
def __init__(self,dist_type,**parameters):
self.dist_type = dist_type
self.parameters = parameters
self.p = [ self.parameters[z] for z in functions[dist_type]['parameters'] ]
for key,val in functions[dist_type].items():
if key == 'parameters':
pass
else
setattr(self, key, lambda x:val(x,self.p))
dist = Distribution('exp',l=3.5)
现在,当我跑型(dist.pdf)我得到的是一个lambda函数,但是当我运行的功能,说dist.pdf(4.0)一个类型错误:“名单”的对象不是一个调用。
在旁注中,代码的风格/复杂程度如何?
谢谢,我会检查你提到的这些技巧。我只想要一个类,其功能取决于一组参数,事情变得更加复杂,因为我需要的参数取决于'dist_type',这就是为什么我使用字典.. – chuse