【问题标题】:Fixed seed random number between 0 and 1固定种子随机数介于 0 和 1 之间
【发布时间】:2016-06-25 17:30:03
【问题描述】:

我想通过在 python 中给出 0 到 1 之间的种子来生成固定随机数列表。例如,l = [0.1, 0.5, 0.6, 0.9, 0.75]。我可以通过使用 random.random() 来获得它。但每次它都会给出一个新的随机数列表。我想通过提供一些种子来修复它。

我该怎么做。提前致谢!

【问题讨论】:

标签: python python-3.x random


【解决方案1】:

查看 random.seed() 的 pydocs 页面

[>>> seed = 123
[>>> random.seed(seed)
[>>> i = [random.random() for _ in xrange(5)]
[>>> print i
[0.052363598850944326, 0.08718667752263232, 0.4072417636703983, 0.10770023493843905, 0.9011988779516946]

每次调用上述方法都会返回相同的列表。换句话说,输出是确定性和可预测的。

请注意,Python 3 用户必须使用[random.random() for _ in range(5)]

【讨论】:

  • 这是我会写的解决方案。设置一个特定的种子。使用for _ in xrange() 的奖励。
【解决方案2】:

你可以这样做:

import random
l = []
n = 10      # you can change it to whatever you want, it is list length
for i in range(n):
    random.seed(i)
    l += [random.random()]

print(l)

它总是会给出相同的随机列表。

【讨论】:

  • 这对于他的需要来说过于复杂:您不必为每次调用random.random 生成一个新种子。在循环之前调用random.seed(0) 或任何特定号码都可以正常工作。此外,l.append(random.random()) 在我看来是构建该列表的首选方式
  • 谢谢@ands 我想要这样的列表,但@TemporalWolf 也是正确的random.seed(i) 应该在循环之前。
  • 是的@TemporalWolf 是对的,你可以在循环之前放random.seed(0),也可以只使用l = [random.random() for i in range(n)]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
  • 2012-11-03
  • 2021-01-01
  • 2015-02-20
  • 2016-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多