私は多くのオブジェクトが関係する問題を抱えています.Nはそれぞれ一定数の状態jになる可能性があります。オブジェクトがそれぞれの状態にある確率はわかっていますが、その確率はオブジェクトによって異なります。
たとえば、j=3 個の状態と N=2 個のオブジェクトがある場合、確率は次のように記述できます。
P_object1 = [0.1,0.8,0.1]
P_object2 = [0.05,0.05,0.99]
オブジェクトの数が少ない場合は、次のように記述できます。
state_object1 = mc.Categorical("StateObject1", P_object1, size=1)
state_object2 = mc.Categorical("StateObject2", P_object2, size=1)
しかし、私はたくさんのオブジェクトを持っています...
私が作成したいのは、各行が個々のオブジェクトに対応するランダムな状態に対応する整数のベクトルです。
これを行うためにコレクションを実装しようとしました:
objectIDs = np.empty(nGrains, dtype=object)
objectIDs_0 = mc.Categorical('objectID_0', probs[0])
objectIDs[0] = objectIDs_0
for i in range(1, N):
objectIDs[i] = mc.Categorical('objectID_%i' %i, probs[i])
次のステップでこれを使用しようとすると、問題が発生します。
@mc.deterministic
def lambda_S(nI=nI, objectIDs=objectIDs, closureAges=closureAges):
out = np.empty(N)
for i in range(N):
out[i] = nI[i] * ( math.exp( lambda_U238*stateValue[objectIDs[i]]*1.E6 ) - 1 ) / b
return out
上記の nI は整数のベクトルであり、stateValue は double のベクトルで、状態ごとに 1 つです。問題は、これがpymcオブジェクトではなくdoubleの配列を返すため、モデルを実行しようとすると失敗することです...