確率分布を表すために、このような (簡略化された) クラスを作成しています。私が望むのは、オブジェクト Distribution をそのタイプとパラメーターのみで初期化し、そのタイプに応じて割り当てられたいくつかの機能を持たせることです。
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)
今、 type(dist.pdf) を実行すると、ラムダ関数であることがわかりますが、関数を実行すると、 dist.pdf(4.0) TypeError: 'list' object is not a callable.
余談ですが、コードのスタイル/複雑さはどうですか?