事前分布がディリクレ分布の積であるカテゴリカル ベクトルを描画したいと考えています。カテゴリは固定されており、カテゴリ ベクトルの各要素は異なるディリクレ事前分布に対応しています。これは、4 つのカテゴリを持つ長さ 33 のカテゴリカル ベクトルであり、事前にディリクレを使用して設定されています。
import pymc3 as pm
with pm.Model() as model3:
theta = pm.Dirichlet(name='theta',a=np.ones((33,4)), shape=(33,4))
seq = [pm.Categorical(name='seq_{}'.format(str(i)), p=theta[i,:], shape=(1,)) for i in range(33)]
step1 = pm.Metropolis(vars=[theta])
step2 = [pm.CategoricalGibbsMetropolis(vars=[i]) for i in seq]
trace = pm.sample(50, step=[step1] + [i for i in step2])
ただし、このアプローチは、カテゴリ ベクトルを取得するために配列のインデックスを作成する必要があるため、面倒です。これを行うより良い方法はありますか?