【问题标题】:Get parameter list of pymc object获取pymc对象的参数列表
【发布时间】: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


    【解决方案1】:

    有问题的对象将它们的名称存储在__name__ 属性中。可以这样访问它们:

    import pymc
    obj = pymc.Uniform("a", 0, 5)
    print obj.__name__
    

    【讨论】:

    • 低质量过滤器正在收集您的答案。你能补充一些关于为什么这个代码块解决了 OPs 问题的信息吗?
    • 低质量过滤器正在收集您的答案。可以扩展您的答案吗?
    猜你喜欢
    • 1970-01-01
    • 2017-06-20
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    • 2019-04-12
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多