【问题标题】:seed for different numpy functions不同numpy函数的种子
【发布时间】:2020-10-29 17:59:25
【问题描述】:
    a = (np.random.rand(10) > 0.1).astype(int)
    b = np.random.binomial(1, 0.9, 10)
    c = np.random.choice([0, 1], 10, [0.1, 0.9])

numpy 中至少有 3 种不同的方式,通过它们我可以获得 0 和 1 的数组(它们以一定的概率 p 相加(例如 p=0.9))。当我使用np.random.seed(1) 时,某些方法总是返回相同的数组。但是,即使使用相同的种子,上述所有方法都会创建不同的数组。发生这种情况是因为它们都有不同的 PRNG 算法,还是只是其中一些不受 np.random.seed(1) 的影响?

【问题讨论】:

  • 当给定相同的种子时,每个方法是否总是创建与该方法先前运行相同的数组?换句话说,它们只是彼此不同但仍然自洽吗?
  • 这是因为他们使用随机数流执行不同的计算以选择值。
  • 是的,它们是自洽的,彼此不同

标签: python numpy random


【解决方案1】:

不同的方法以不同的方式使用伪随机数流,这就是为什么它们不会产生相同的样本,即使您在每个样本之前以相同的方式播种生成器。

考虑一种额外的方法(用于下面的变量b)可能会更清楚。

np.random.seed(1)
a = (np.random.rand(10) > 0.1).astype(int)
np.random.seed(1)
b = (np.random.rand(10) < 0.9).astype(int)

这两种方法都将生成概率为0.9 的方法,并且它们在调用rand 时绘制相同的基础数字(因为它们的种子相同)。例如,如果从对rand 的调用中采样0.02,则a 中的对应元素将为0b 中的对应元素将为1。这类似于您在使用其他方法生成样本时观察到的差异。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2018-08-18
    • 1970-01-01
    • 2014-08-14
    相关资源
    最近更新 更多