我想使用随机数生成数据,然后使用生成的数据生成带有替换的随机样本。问题是,使用random.seed(10)
只修复生成数据的初始随机数,但不修复循环内生成的随机样本,每次我运行代码时,我都会获得相同的生成数据但不同的随机样本,我希望获得相同的随机样本,以便获得可重现的结果。代码如下:
import numpy as np
import random
np.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))
np.mean(sample_mean)
应该在每次运行代码时检索相同的值,但这并没有发生。
我尝试在循环中输入随机种子(I),但不起作用。
2条答案
按热度按时间7jmck4yq1#
您的
random.choices(data, k=215)
来自Python内置的random
库,该库的种子与numpy.random
中的种子不同,因此输入NumPy是不够的。这里的正确解决方案是在这里使用numpy
np.random.choice
,因为您已经在使用numpy了。PS:在
data
上调用list
是不必要的,这会减慢代码的速度。jjhzyzn02#
修复
np.random
的种子不会修复random
的种子...因此,只需添加一行代码来修复两个种子,就可以得到可重现的结果:
或者,您也可以使用
np.random.choices
而不是random.choices
。