【发布时间】:2014-07-11 00:51:25
【问题描述】:
我正在尝试编写一个通用函数,它接受一个用户定义的函数、一个先验列表(除了其他东西)和做某事(与这个问题无关)
for eg(下面代码中的...-sn-ps指的是无关信息)
generic_func(..., pred, [pymc.Uniform("a", 0, 5), pymc.Unform("b", 0, 1)], ...)
其中 user_fn 定义为
def pred(...,a, b, ...) : ...
我需要定义generic_func,我这样做如下:
def generic_func(..., user_fn, fittable_prior_list, optional_arguments_for_user_fn):
h = {}
for params in fittable_prior_list:
h[params.name] = params
user_fn(..., **h, ...)
我不想限制用户以与 user_fn 期望的顺序相同的顺序传递参数,这就是我使用字典的原因。我假设列表中的先验与 user_fn 的参数名称相同(我很高兴知道这个假设是否可以取消,但即使这个假设成立我也可以)
但我收到以下错误:
AttributeError: 'Uniform' object has no attribute 'name'
我访问了这些链接 How can I read a function's signature including default argument values? ,还有 Getting method parameter names in python
然后我尝试了
tau = pm.Uniform(name = "tau", lower=0, upper=5)
argspec = inspect.getargspec(tau).args
我收到以下错误
TypeError: <pymc.distributions.Uniform 'tau' at 0x9a3210c> is not a Python function
有没有办法可以访问这些 pymc 对象的名称?
虽然这不是主要问题,但我也很高兴知道是否有比我正在使用的方法更好的方法来解决这个问题。
【问题讨论】:
标签: python function object pymc