【问题标题】:Drawing floating numbers with [0, 1] from uniform distribution by using numpy使用 numpy 从均匀分布中绘制具有 [0, 1] 的浮点数
【发布时间】:2013-02-17 14:47:28
【问题描述】:

我目前正在尝试从均匀分布中提取浮点数。

Numpy 提供了 numpy.random.uniform。

import numpy as np
sample = np.random.uniform (0, 1, size = (N,) + (2,) + (2,) * K)

但是,此模块在半开区间 [0, 1) 上生成值。

如何从均匀分布中绘制带有 [0, 1] 的浮点数?

谢谢。

【问题讨论】:

  • 这有什么用例?

标签: python numpy uniform


【解决方案1】:

从 (0,1) 或 [0,1] 或 [0,1) 或 (0,1] 绘制均匀分布的数字并不重要。因为得到 0 或 1 的概率是零。

【讨论】:

  • +1 即使对于计算机算法,到达终点的概率也不严格为零。
  • 我也会直接忽略它。对于采样 1 的极不可能事件,拒绝它是可能的,但可能太昂贵而不值得。
【解决方案2】:

random_integers 在闭区间上生成整数。因此,如果您可以将您的实际问题改写为使用整数,那么您就大功告成了。否则,您可以考虑 1./MAX_INT 的粒度是否足以解决您的问题。

【讨论】:

    【解决方案3】:

    来自标准 Python random.uniform documentation

    端点值 b 可能包含在范围内,也可能不包含在范围内,具体取决于等式 a + (b-a) * random() 中的浮点舍入。

    所以基本上,端点的包含严格基于所使用的浮点舍入方案。因此,要包含 1.0,您需要定义操作所需的精度并相应地舍入随机数。如果您没有为您的问题定义精确度,您可以使用numpy.nextafter。之前的answer 已经涵盖了它的用法。

    【讨论】:

    • 吹毛求疵:将标准库中的 randoms 和 numpy 混合在一起通常是个坏主意。
    【解决方案4】:

    如果您的软件依赖于[0,1)[0,1] 之间的差异,那么您可能应该使用自己的随机数生成器,可能是the one mentioned here,以确保它满足这些严格的要求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-04
      • 1970-01-01
      • 2020-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-05
      相关资源
      最近更新 更多