Python 如何用指数核绘制泊松过程

Python 如何用指数核绘制泊松过程,python,math,matplotlib,scipy,statsmodels,Python,Math,Matplotlib,Scipy,Statsmodels,我想在给定的时间窗口中模拟具有指数核的泊松过程的时间。我有下面的代码,它可以工作,但很可怕 # Attempt to simulate a Poisson process. import random import matplotlib.pyplot as plt t = 0 rate = 5 timeinterval = 100 t = int(100*random.expovariate(rate)) times=[] while (t < timeinterval): tim

我想在给定的时间窗口中模拟具有指数核的泊松过程的时间。我有下面的代码,它可以工作,但很可怕

# Attempt to simulate a Poisson process.
import random
import matplotlib.pyplot as plt
t = 0
rate = 5
timeinterval = 100
t = int(100*random.expovariate(rate))
times=[]
while (t < timeinterval):
    times.append(t)
    print t
    t+= int(100*random.expovariate(rate))

print times
s = [0]*100
a=0.5
for i in xrange(len(s)):
    s[i] = int(i-1 in times) + (1-a) * s[i-1]
plt.plot(s)
plt.show()
尝试模拟泊松过程。 随机输入 将matplotlib.pyplot作为plt导入 t=0 费率=5 时间间隔=100 t=int(100*随机指数变量(速率)) 时间=[] 而(t<时间间隔): 倍。追加(t) 打印t t+=int(100*随机指数变量(速率)) 印刷时间 s=[0]*100 a=0.5 对于x范围内的i(len(s)): s[i]=int(i-1倍)+(1-a)*s[i-1] 小幅图(s) plt.show() 如何避免代码中的混乱

例如,我乘以100并使用int,这样我就可以绘制数据。理想情况下我不会那样做

在一个相关的注释中,我希望时间间隔是1而不是100(去掉了所有*100部分的代码),但是我看不到如何绘制结果


产生这些乱码的主要原因是通过对尖峰的时间进行采样来解决问题,但由于希望它们衰减,因此需要将它们强制放置在网格上

因此,我建议从一个网格开始,计算尖峰出现的概率。然后您可以同时衰减信号:

import random
import matplotlib.pyplot as plt
from numpy import linspace, exp

random.seed(123)
t0 = 0
t1 = 1
times = linspace(t0, t1, 1000)
dt = times[1] - times[0]
result = []
s = 0
decay = 0.01  # decay to 1/e after this time                                                       
lambd = 0.2   # expect roughly one spike each timeinterval lambd                                   
n = 0
for t in times:
    if random.random() > exp(-dt/lambd): # actually random.random() < 1 - exp(-dt/lambd)           
        s += 1.0
        n += 1
    s = s * exp(-dt/decay)
    result.append(s)

print "number of observed spikes=%i expected mean=%f" % (n, (t1-t0)/lambd)
plt.figure(figsize=(6,4))
plt.plot(times, result)
plt.savefig("process.png")
plt.show()

这里我还交换了衰减和尖峰生成,所以它们从
1

开始,为什么要绘制衰减?你可以在特定的时间t使用vline。那么也没有理由将时间转换为整数网格。@user333700我想将延迟可视化。最后,我将在图表中添加其他内容,并查看它们如何与延迟相交。但是,可以使用任意规则间距的栅格,而不是整数栅格。例如,如果将
四舍五入为2位小数,则可以在单位间隔0,0.01,…,1中构建一个包含100个时间点的网格。
rate = 1.0/lambd
tspike = t0 + random.expovariate(rate)
for t in times:
    s = s * exp(-dt/decay)
    if t > tspike:
        s += 1.0
        n += 1
        tspike = t + random.expovariate(rate)
    result.append(s)