У меня есть три вопроса относительно декораторов, на которые я не могу найти ответ:
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) напечатать switchpoint.logp #распечатывает log-вероятность, как и ожидалось
2) print switchpoint.random # не генерирует случайное число
3) print switchpoint.random() # генерирует случайное число
4) распечатать switchpoint.logp() #error
Если 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
, этот кусок кода будет выполнен?