Python循环存储最后迭代值报错:%z魔法函数未找到
修正你的泊松分布累积pmf计算代码
嘿,我来帮你搞定这个代码错误的问题!你遇到的%z魔法函数找不到的错误,是因为你误用了IPython的魔法命令来存储变量——%z根本不是用来保存Python变量值的方式,咱们得用正确的列表来收集结果才行。
另外,你的原代码逻辑还有个小坑:循环里先把pmf值加入列表再自增z,这会导致最后得到的z比实际需要的大1,比如你例子里满足条件的是z=9,但原代码里break时z已经变成10了,直接存z就会出错。
下面是修正并优化后的完整代码:
from scipy.stats import poisson # 定义你的输入变量 mean = [5.76, 6.5, 7, 5, 4.5, 6, 9, 2.5, 3, 5.5] limit = [90, 80, 95, 96, 98, 85, 82, 75, 90, 91] # 初始化存储泊松分布实例的列表 r_v1 = [] for m in mean: r_v = poisson(m) r_v1.append(r_v) # 创建一个空列表来存储每个对应的z值 z_results = [] for dist, threshold in zip(r_v1, limit): cumulative_pmf = 0.0 z = 0 while True: # 累加当前z值的pmf cumulative_pmf += dist.pmf(z) # 判断累积和(乘以100后)是否达到阈值 if round(cumulative_pmf, 2) * 100 >= threshold: z_results.append(z) break # 没满足条件就继续下一个z z += 1 # 打印结果看看 print("每个mean对应的最小z值:", z_results)
代码说明:
- 替换错误的存储方式:用
z_results列表来收集每个循环得到的z值,这是Python中存储多个结果的标准做法。 - 优化累积计算:直接用
cumulative_pmf变量累加pmf值,不需要额外创建列表存储每个pmf,更高效简洁。 - 修正逻辑误差:先计算当前z的pmf并累加,再判断条件,满足时直接存储当前的z,避免了原代码中z自增后导致的数值偏差。
运行这段代码后,你就能得到每个mean对应的最小z值啦,比如mean=5.76时会得到z=9,和你给出的例子一致。
内容的提问来源于stack exchange,提问作者IndigoChild
相关产品推荐
相关产品推荐

