You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:47:22