【问题标题】:Random number between 0 and 1 in python [duplicate]python中0到1之间的随机数[重复]
【发布时间】:2016-01-26 09:04:42
【问题描述】:

我想要一个介于 0 和 1 之间的随机数,例如 0.3452。我使用了random.randrange(0, 1),但对我来说始终为 0。我该怎么办?

【问题讨论】:

  • @gidim:这是更具体的问题,例如,random.random() ([0,1)) 是此问题的答案,但不是您链接的问题,因此它不是重复的。跨度>
  • randrange(a,b) 返回 a(包括)和 b(不包括)之间的 INTEGERS
  • 将 numpy 导入为 np np.random.random_sample((120))

标签: python random


【解决方案1】:

我想要一个介于 0 和 1 之间的随机数,例如 0.3452

random.random() 就是你要找的东西:

来自 python 文档: random.random() 返回下一个随机浮点数 范围 [0.0, 1.0)。


顺便说一句,为什么你的尝试没有成功?

您的尝试是:random.randrange(0, 1)

来自 python 文档: random.randrange() 从范围(开始,停止,步骤)中返回一个随机选择的元素。这等效于choice(range(start, stop, step)),但实际上并不构建范围对象。

所以,你在这里所做的,random.randrange(a,b) 是从range(a,b) 中选择一个随机元素;在你的情况下,来自range(0,1),但是,你猜怎么着!:range(0,1) 中的唯一元素是0,所以,你可以从range(0,1) 中选择的唯一元素是0;这就是为什么你总是收到0 的回复。

【讨论】:

    【解决方案2】:

    您可以使用random.uniform

    import random
    random.uniform(0, 1)
    

    【讨论】:

    • 这只是return a + (b-a) * self.random()
    • 确保你有import random
    • 要获得始终相同的数字,请确保先设置种子,只需 random.seed(123)
    【解决方案3】:

    我发现我的变体更灵活。

    str_Key           = ""
    str_FullKey       = "" 
    str_CharacterPool = "01234ABCDEFfghij~-)"
    for int_I in range(64): 
        str_Key = random.choice(str_CharacterPool) 
        str_FullKey = str_FullKey + str_Key 
    

    【讨论】:

      【解决方案4】:

      random.randrange(0,2) 这行得通!

      【讨论】:

      • 作为参考,OP 想要一个介于 0 和 1 之间的浮点数,但这将返回整数 0 和 1 之间的选择。
      • 这如何回答这个问题?一种是寻找 0 到 1(不包括)之间的浮点数。
      【解决方案5】:

      RTM

      来自 Python random 模块的文档:

      Functions for integers:
      
      random.randrange(stop)
      random.randrange(start, stop[, step])
      
          Return a randomly selected element from range(start, stop, step).
          This is equivalent to choice(range(start, stop, step)), but doesn’t
          actually build a range object.
      

      这就解释了为什么它只给你 0,不是吗。 range(0,1)[0]。它正在从仅包含该值的列表中进行选择。

      也来自那些文档:

      random.random()    
          Return the next random floating point number in the range [0.0, 1.0).
      

      但如果您有意包含 numpy 标记,您可以使用 np.random 函数一次调用在该范围内生成许多随机浮点数。

      【讨论】:

        【解决方案6】:

        random.random() 正是这样做的

        >>> import random
        >>> for i in range(10):
        ...     print(random.random())
        ... 
        0.908047338626
        0.0199900075962
        0.904058545833
        0.321508119045
        0.657086320195
        0.714084413092
        0.315924955063
        0.696965958019
        0.93824013683
        0.484207425759
        

        如果你想要真的随机数,并且覆盖范围 [0, 1]:

        >>> import os
        >>> int.from_bytes(os.urandom(8), byteorder="big") / ((1 << 64) - 1)
        0.7409674234050893
        

        【讨论】:

        • random.random 返回值在 [0,1) 之间,因此 return 永远不会是 1。
        • @gidim: randrange(a, b) 不包括 b 以及 Python 中的任何 *range()。 Python 使用option a)。 OP 显示randrange(),而不是包含两条边的randint()
        • 即使包含在内,返回 1 的概率也会非常低(实际上 python 的浮点数精度为 64 位),因此不会有太大变化。
        【解决方案7】:

        你可以使用numpy.random模块,你可以得到你想要的形状的随机数数组

        >>> import numpy as np
        >>> np.random.random(1)[0]
        0.17425892129128229
        >>> np.random.random((3,2))
        array([[ 0.7978787 ,  0.9784473 ],
               [ 0.49214277,  0.06749958],
               [ 0.12944254,  0.80929816]])
        >>> np.random.random((3,1))
        array([[ 0.86725993],
               [ 0.36869585],
               [ 0.2601249 ]])
        >>> np.random.random((4,1))
        array([[ 0.87161403],
               [ 0.41976921],
               [ 0.35714702],
               [ 0.31166808]])
        >>> np.random.random_sample()
        0.47108547995356098
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-04-11
          • 2017-01-03
          • 2015-01-08
          • 2013-01-02
          • 2012-12-17
          • 2014-09-22
          相关资源
          最近更新 更多