2014-07-11 34 views
0

我試圖寫一個通用的函數,它接受一個用戶定義的函數,先驗(除其他事項外)的列表的參數列表和做一些事情(無關這個問題)獲取pymc對象

爲例如,(...下面的代碼片段是指不相關的信息)

generic_func(..., pred, [pymc.Uniform("a", 0, 5), pymc.Unform("b", 0, 1)], ...) 

其中user_fn被定義爲

def pred(...,a, b, ...) : ... 

我需要定義generic_func,我做如下S:

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對象的名字嗎?

雖然這不是主要問題,但我也很樂意知道是否有更好的方法來解決這個問題,而不是我正在使用的問題。

回答

0

有問題的對象存儲在__name__屬性他們的名字。他們可以這樣訪問:

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

您的答案正在拾取的低質量過濾器。您可以添加在爲什麼這個代碼塊解決了有機磷農藥的問題的一些信息? –

+0

你的答案是由低品質濾鏡回升。可以擴大你的答案? –