使用Numpy生成系统泊松请求到达时的分布异常问题排查
问题分析与解决
你的代码核心问题出在可视化方式错误,导致你误以为结果不符合泊松分布特征:
泊松到达过程的核心特征是「单位时间内到达的请求数」服从泊松分布,但你当前的代码是把每个时间步的到达数直接画成柱状图(每个x轴点对应单个时间步的到达数),这展示的是每个时间点的到达情况,不是统计分布。
正确的做法是统计所有时间步中,不同到达数出现的频率,再和理论泊松分布对比。
修正后的代码示例
import numpy as np import matplotlib.pyplot as plt from scipy.stats import poisson no_of_req = 500 timesteps = 500 rate = no_of_req / timesteps # 每个时间步的平均到达率为1 # 生成所有时间步的到达数 poisson_counts = np.random.poisson(rate, size=timesteps) # 统计各到达数的出现频率 unique_counts, counts_freq = np.unique(poisson_counts, return_counts=True) counts_freq = counts_freq / timesteps # 转换为频率 # 计算理论泊松分布的概率 theoretical_probs = poisson.pmf(unique_counts, rate) # 绘制对比图 plt.bar(unique_counts, counts_freq, width=0.4, label='模拟频率', align='center') plt.plot(unique_counts, theoretical_probs, 'ro-', label='理论泊松分布') plt.xlabel('单位时间内到达数') plt.ylabel('频率/概率') plt.legend() plt.show()
额外说明
- 你原始代码中的
update_time函数不影响泊松到达数的生成逻辑,除非该函数篡改了时间步的定义,但从问题描述看,核心问题还是可视化方式有误。 - 当模拟次数(timesteps)足够大时,模拟的频率会逐渐逼近理论泊松分布的概率。
内容的提问来源于stack exchange,提问作者Hamsa
相关产品推荐
相关产品推荐

