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

如何在循环中设置随机种子以获取可复现的随机样本?

问题原因

你代码里同时混用了NumPy的随机模块和Python标准库的random模块,这两个模块的随机状态是完全独立的。你只固定了np.random的种子,但循环中用于抽样的random.choices属于random模块,它的随机状态没被固定,所以每次运行的抽样结果会不一样。之前在循环内用random.seed(i)无效,是因为每次循环都重置种子,导致抽样的起始状态随i变化,反而破坏了全局的随机一致性。

解决方案

有两种简单的修复方式,任选其一即可:

方式1:固定random模块的全局种子

在代码开头同时给random模块设置固定种子,让抽样的随机状态从同一个起点开始:

import numpy as np
import random

# 同时固定两个随机模块的种子
np.random.seed(10)
random.seed(10)

data = list(np.random.binomial(size=215, n=1, p=0.3))

sample_mean = []

for i in range(1000):
    sample = random.choices(data, k=215)
    mean = np.mean(sample)
    sample_mean.append(mean)

print(np.mean(sample_mean))

方式2:统一使用NumPy的随机函数抽样

放弃使用random模块,全程用NumPy的函数完成抽样,这样只需要管理NumPy的种子即可:

import numpy as np

np.random.seed(10)

# 直接保留NumPy数组,无需转成list
data = np.random.binomial(size=215, n=1, p=0.3)

sample_mean = []

for i in range(1000):
    # replace=True 对应有放回抽样,和random.choices行为一致
    sample = np.random.choice(data, size=215, replace=True)
    mean = np.mean(sample)
    sample_mean.append(mean)

print(np.mean(sample_mean))

内容的提问来源于stack exchange,提问作者Various Listen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:02:24