我有一个JSON配置文件,告诉我要采样的分发类型。例如:
{ "parameter1" : { "distribution" : "exponential", "mean" = 5},
"parameter2" : { "distribution" : "poisson", "mean" = 3} }
上面的列表可能是详尽无遗的。我需要一个函数来读取这个json文件,并将相应的分发返回给调用代码。
我尝试使用字符串连接和eval()
,但这直接给了我样本值。
我应该能够将对象/函数返回给调用函数。
有人能帮助我吗?
我的尝试:
import numpy.random as random
def getDistribution(distribution, params):
string= 'random.'+distribution
return eval(string)(params["mean"])
这会给我一个值。有没有办法将句柄返回到random.exponential()
或random.poisson()
之类的实际分布函数,我可以在调用getDistribution()
的函数中使用它?
答案 0 :(得分:3)
您可以使用getattr返回方法(这是random
的属性):
def get_method(name):
return getattr(random, name, None)
def get_distribution(method, params):
return method(params['mean'])
method_name = 'exponential'
method = get_method(method_name)
if method:
results = get_distribution(method, params)
else:
raise AttributeError('No such method in random: {}'.format(method_name))
getattr
采用可选的第三个参数,该参数是无法找到属性时返回的值。我使用它来显式返回None
。如果所选的方法名称不可用,您可以将其更改为要使用的默认方法。