【问题标题】:python maintain two different random instancepython维护两个不同的随机实例
【发布时间】:2016-09-16 17:29:27
【问题描述】:

我正在尝试进行一些分析,出于“原因”,我希望程序中的对象每个都有自己的种子,但没有全局种子。我可以完成这样的事情吗?

a = random.seed(seed1) 
b = random.seed(seed1)

for a in range(5) :
    print a.random(), b.random()

预期输出将是

0.23 0.23 
0.45 0.45 
0.56 0.56 
0.34 0.34 

等等... 显然是一个超级做作的例子——这些单独的种子将被埋在对象中,并对应于特定的事物。但第一步是让这样的事情发挥作用。

如何让 python 维护多个种子随机数?

【问题讨论】:

  • 我不明白为什么不,它不像你在两个变量之间共享内存,你试过编码了吗?
  • random 没有初始化来返回我可以看到的对象,我在我的代码中使用了它,因为我希望它这样做。每次我调用种子时,它都会根据我的测试影响全局种子。我厌倦了编码并得到一个 Nonetype 没有随机错误,因为 random.seed() 实际上并没有重新运行任何东西。这是 python 2.7 顺便说一句

标签: python


【解决方案1】:

您需要使用random.Random 类对象。

from random import Random

a = Random()
b = Random()

a.seed(0)
b.seed(0)

for _ in range(5):
    print(a.randrange(10), b.randrange(10))

# Output:
# 6 6
# 6 6
# 0 0
# 4 4
# 8 8

documentation 明确说明了您的问题:

这个模块提供的函数实际上是一个绑定的方法 random.Random 类的隐藏实例。你可以实例化你的 拥有Random 的实例以获取不共享状态的生成器。

【讨论】:

    【解决方案2】:

    那么,这可能会对您有所帮助:

    >>> for _ in range(5): 
              rn=random.randint(1,100) 
              print(rn, rn) 
    

    输出是:
    38 38

    98 98

    8 8

    29 29

    67 67

    【讨论】:

      【解决方案3】:

      我希望你只是在寻找上面输出中提到的随机数:

      这是一些代码。请检查,如果对您有帮助:

      >>> for i in range(5):
              print(random.randint(1,100), random.randint(1,100))
      

      输出如下:

      14 93

      51 62

      20 12

      9 3

      52 71

      【讨论】:

      • 这显然不是 OP 所要寻找的:生成的随机对在您的输出中是不同的,而预期是相同的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-13
      • 1970-01-01
      • 2023-03-16
      • 2012-12-09
      • 1970-01-01
      相关资源
      最近更新 更多