#%% import random from math import log import matplotlib.pyplot as plt import numpy as np class PoissonProcess(): def __init__(self, **kwargs): self.lam = kwargs.get("lam", 5) # rate self.size = kwargs.get("size", 100) def generate(self): _time = 0 events = [] for i in range(self.size): p = random.random() _interval = - log(1-p) / self.lam _time = _time + _interval events.append(_time) return events #1 (events) poi = PoissonProcess(lam = 5).generate() print(poi) #matplotlib: x=index, y=poi[index] plt.eventplot(poi) #2 (points) poi = np.random.poisson(lam=5,size=100) print(f"avergae is {np.average(poi)}") #poi = [i-j for i,j in zip(poi[:-1],poi[1:])] poi2 = [np.sum(poi[1:i]) for i in range(len(poi))] # or poin2=np.cumsum(poi) print(poi2) #poi = np.diff(poi) # alternative numpy solution for inter-interval durations #plt.plot(poi2) plt.show() #%% import numpy as np from scipy.special import factorial def events_prob(events_per_unit_time, total_time, num_of_events): # poisson dist lam = events_per_unit_time * total_time return np.exp(-lam) * np.power(lam, num_of_events) * factorial(num_of_events) rate = 5 ks = np.arange(20) ps = events_prob(5,20,ks) print(np.argmax(ps), np.max(ps)) #%%