给定此 python 代码success = np.array([1, 2, 3, 4, 5])failure = np.array([12, 13, 14, 15, 16])beta_samples = np.random.beta(success + 1, Failure + 1, size = 5)print(beta_samples)beta_sam...
给出这个python代码
success = np.array([1, 2, 3, 4, 5])
failure = np.array([12, 13, 14, 15, 16])
beta_samples = np.random.beta(success + 1, failure + 1, size = 5)
print(beta_samples)
beta_samples2 = [np.random.beta(success[i] + 1, failure[i] + 1) for i in range(5)]
print(beta_samples2)
python代码的输出是:
[0.22023725 0.18643029 0.14765836 0.12017337 0.39477445]
[0.22605254862542162, 0.12566539444840888, 0.13290508184544317, 0.2718239044172474, 0.1464185003569084]
为什么我使用相同的 success
和 failure
数组,却得到两个完全不同的 Beta 分布样本?哪一个是正确的,哪一个是错误的?这是因为稍后我需要使用函数选择这些 Beta 样本中最大值的位置/索引, argmax(...)
而目前,这两个样本都会给我不同的索引/位置。
这是设计使然。伪随机数生成器通常需要某种 种子 (不完全是起始值,但类似)。该种子通常是基础设施的某种状态(例如时间),但您也可以手动设置它。使用种子,您可以重现伪随机数。请参见 此处 :
我们的 RNG 是确定性序列,可以通过指定种子整数来重现以得出其初始状态。...
因此,您可以使用 np.random.seed
并执行
import numpy as np
seed = 12345
success = np.array([1, 2, 3, 4, 5])
failure = np.array([12, 13, 14, 15, 16])
np.random.seed(seed)
beta_samples = np.random.beta(success + 1, failure + 1, size = 5)
print(beta_samples)
np.random.seed(seed)
beta_samples2 = [np.random.beta(success[i] + 1, failure[i] + 1) for i in range(5)]
print(beta_samples2)
以获得合适的样本。