나는 사전에 넣을 수있는 많은 수의 사전들을 가지고 있습니다. 내가 수동으로 이러한 변수를 만들 수 있습니다사전에서 사전 변수를 만드는 방법은 무엇입니까?
d = {'a1':{'name':'a1','lower':0,'upper':10},\
'a2':{'name':'a2','lower':0,'upper':10},\
'a3':{'name':'a3','lower':0,'upper':10}}
: 간단하게하기 위해,의는 3 전과를 포함하는 다음 예제를 사용하자
import pymc3
model = pymc3.Model()
with model:
a1 = pymc3.Uniform('a1',lower=0,upper=10)
a2 = pymc3.Uniform('a2',lower=0,upper=10)
a3 = pymc3.Uniform('a3',lower=0,upper=10)
하지만이 전과의 수는이 방법은 고통스러운합니다 . pymc3의 사전에서 사전을 정의하는 적절한 방법이 있습니까? 지금까지 발견 된 유일한 자동 솔루션은 다음과 같습니다.
list_prior_names = ['a1','a2','a3']
for prior_name in list_prior_names:
exec(prior_name+"=pymc3.Uniform(prior_name,lower=d[prior_name]['lower'],upper=d[prior_name]['upper'])")
더 좋은 방법이 있습니까?
마찬가지로, 나는이 사전과 다른 변수 사이의 관계를 제공하는 사전을 가지고 있습니다. 간단하게하기 위해 들어, 다음의 예는 사도와 새로운 변수 간의 선형 관계를 정의하고 사용하자 : 나는 B1, B2 만들 수있는, 다시 한번
relations = {'a1':{'b1':2,'b2:4},'a2':{'b1':1},'a3':{'b3':5}}
를 B3 수동으로 다음 코드 :
b1 = 2*a1 + a2
b2 = 4*a1
b3 = 5*a3
다른 솔루션과 비슷한 해결책을 사용할 수는 있지만 여기서는 b1, b2, b3을 만드는 더 좋은 방법이 있다고 생각합니다.
내가 현재 사용하고있는 코드는 다음과 같습니다 사람이 A1을 만들 수있는 적절한 방법에 대한 단서를 가지고 있다면
이import pymc3
model = pymc3.Model()
obs1,obs2,obs3 = 2,4,5
d = {'a1':{'name':'a1','lower':0,'upper':10},\
'a2':{'name':'a2','lower':0,'upper':10},\
'a3':{'name':'a3','lower':0,'upper':10}}
with model:
list_prior_names = ['a1','a2','a3']
for prior_name in list_prior_names:
exec(prior_name+"=pymc3.Uniform(prior_name,lower=d[prior_name]['lower'],upper=d[prior_name]['upper'])")
b1 = 2*a1 + a2
b2 = 4*a1
b3 = 5*a3
m1 = pymc3.Normal('M1',mu=b1,sd=0.1,observed=obs1)
m2 = pymc3.Normal('M2',mu=b2,sd=0.1,observed=obs2)
m3 = pymc3.Normal('M3',mu=b3,sd=0.1,observed=obs3)
trace = pymc3.sample(1000)
, A2, A3, B1, B2 및 B3, 나는 감사하게 될 거라고.