I would try to use indexing. Assuming x
is a data frame, create integer variables for i
and j
.
u = pm.Dirichlet('u', ..., shape=n_time_bins) # or whatever prior you wish
v = pm.Dirichlet('v', ..., shape=n_days) # or whatever prior you wish
sd = pm.Deterministic('sd', (u[df.i.values] * v[df.j.values])**2)
observed = pm.Normal('observed', mu=0, sd=sd, observed=df.x)