我有一个涉及许多对象的问题,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 是一个双精度向量,每个状态一个。问题是这会返回一个双精度数组而不是一个 pymc 对象,因此当我尝试运行模型时它会失败......