def generate_samples_marked(intensity, T, n):
U = intensity.dim
Sequences = []
inds = np.arange(U)
for i in range(n):
seq = []
t = 0
while True:
intens1 = intensity.getUpperBound(t,T,inds)
#print(intens1)
dt = np.random.exponential(1/sum(intens1))
#print(dt)
new_t = t + dt
#print(new_t)
if new_t > T:
break
intens2 = intensity.getValue(new_t, inds)
#print(intens2)
u = np.random.uniform()
if sum(intens2)/sum(intens1) > u:
#print(intens2)
x_sum = sum(intens2)
norm_i = [ x/x_sum for x in intens2]
#print(norm_i)
dim = np.nonzero(np.random.multinomial(1, norm_i))
seq.append([new_t, np.asscalar(dim[0])])
t = new_t
if len(seq)>1:
Sequences.append(seq)
return Sequences
Simulate_Poisson.py 文件源码
python
阅读 33
收藏 0
点赞 0
评论 0
评论列表
文章目录