Python生成指定参数的手机日拿起次数总体数据触发断言报错如何解决
问题分析
- 分布选择错误:你使用
np.random.randint(0, pickups, 5000)生成0到pickups-1的均匀分布整数,该分布的均值约为pickups/2,当传入pickups=45时期望均值仅为22.5,和断言要求的45偏差超过20,自然触发均值校验失败。 - 参数未正确使用:函数定义的
pop_size(总体大小)、std(标准差)两个入参完全没有被调用,反而硬编码了总体大小为5000,还在函数内部覆盖了入参std的值,不符合功能设计逻辑。 - 分布不匹配校验规则:断言要求标准差接近
np.sqrt(45),刚好符合泊松分布的特征(泊松分布的方差等于均值λ,标准差为√λ),说明题目要求生成的是均值为pickups的计数类泊松分布总体,而非均匀分布。
修复后的代码
import numpy as np def get_population(pickups, pop_size, std): # 生成均值为pickups的泊松分布总体,大小为入参指定的pop_size pop = np.random.poisson(lam=pickups, size=pop_size) mean = np.mean(pop) std = np.std(pop) return pop, mean, std
修复说明
- 改用
np.random.poisson生成数据,泊松分布的均值等于传入的lam参数(即输入的pickups),刚好满足均值接近45的要求,同时泊松分布的标准差为√λ,也匹配断言中标准差接近np.sqrt(45)的要求,符合手机每日拿起次数这类计数数据的分布特征。 - 总体大小使用入参
pop_size,不再硬编码为5000,符合函数的参数设计逻辑。 - 生成的5000样本的实际均值和标准差误差会稳定在0.5以内,可以正常通过给出的断言校验。
内容的提问来源于stack exchange,提问作者Hefe
相关产品推荐
相关产品推荐

