【发布时间】:2020-02-12 17:09:21
【问题描述】:
我想使用 numpy 从开放范围 (0,5) 的连续均匀分布中提取随机值。我的目光落在了 numpy.random.uniform(0,5) 上。但是,根据文档和一些帖子,这包括闭区间 [0,5] 或半开区间 [0,5)。
我看了很多帖子,到目前为止还没有找到好的答案。到目前为止的答案包括:您不需要使用完全开放的范围,因为绘制起始值和结束值几乎是不可能的(仅在理论上),或者关于它实际上是半开放还是完全封闭存在争议。到目前为止我想到的最好的解决方案是:
import numpy as np
rn = np.random.uniform(sys.float_info.epsilon, 5-sys.float_info.epsilon)
print(rn)
或者使用numpy的next_after:
import numpy as np
rn = np.random.uniform(np.nextafter(0,1), np.nextafter(5,0))
print(rn)
显然,如果我没有很好的理由(理论上)从完全开放的范围中抽牌,我不会打扰每个人。我真的很感激关于如何合理地争论我正在从完全开放的区间 (0,5) 上的连续均匀分布中抽取随机值的想法。
提前致谢!
【问题讨论】:
-
您能否详细说明获取
0.0会给您带来哪些问题?您提出的第二个解决方案包括最小的可表示有限正数(大约5e-324)作为潜在输出,在许多实际情况下,我希望这与0.0一样有问题。 (顺便说一句,您不需要np.nextafter(5, 0):5在这里就足够了;构造输出的方式意味着5.0不是可能的输出。对于您的第一个解决方案,5 - sys.float_info.epsilon没有什么不同来自5。) -
我需要从一个完全开放的区间中绘制的主要原因是因为我正在复制一个人类参与者的实验。在这个实验中,一个随机变量是从一个开区间中抽取的。此外,在我的领域中,不对参与者撒谎是很常见的。因此,我必须找到一种方法来做到这一点。感谢您的建议。
标签: python numpy random uniform