Имам три въпроса относно декораторите, на които не мога да намеря отговор:
Q1) Какво означават аргументите към декораторите в PyMC (@Deterministic, @Stochastic)?
Q2)
@pymc.stochastic(dtype=int)
def switchpoint(value=10, t_l=0, t_h=110):
def logp(value, t_l, t_h):
if value > t_h or value < t_l:
return -np.inf
else:
return -np.log(t_h - t_l + 1)
def random(t_l, t_h):
from numpy.random import random
return np.round( (t_l - t_h) * random() ) + t_l
1)print switchpoint.logp #prints log-probability както се очаква
2)print switchpoint.random #не генерира произволно число
3)print switchpoint.random() # генерира произволно число
4)отпечатайте switchpoint.logp() #грешка
Ако 2 не работи и 3 работи, тогава 1 не трябва да работи и вместо 4 трябва да работи (което е обратното на това, което наблюдавах). Може ли някой да обясни какво се случва?
Q3)
@pymc.stochastic(dtype=int)
def switchpoint(value=1900, t_l=1851, t_h=1962):
if value > t_h or value < t_l:
# Invalid values
return -np.inf
else:
# Uniform log-likelihood
return -np.log(t_h - t_l + 1)
Тук не е посочено, че е logp
все още, ако напиша switchpoint.logp
, тази част от кода се изпълнява?