在带有numpy的Python中,如何获得0和自然x之间均匀分布的随机浮点数,包括两者?

问题描述 投票:0回答:1

在使用 numpy 的 Python 中,对于给定的自然数 x,我们希望获得一个在 [0,x] 区间内均匀分布浮点数的数组(例如 20×2 或任何你想要的形状)。请注意,区间是封闭的。

基于http://stackoverflow.com/a/33359758,一个完全搞砸的方法是

x=10
print(np.reshape([int.from_bytes(os.urandom(8))*x/((1<<64)-1) for i in range(40)],(20,2)))

但是,结果取决于操作系统。我也不明白所获得的数字是否/为什么可以均匀分布。

请注意,以某种方式从 [0,1] 获取统一 IEEE 754 浮点然后将它们乘以 x 的(不同)方法可能存在缺陷,因为除非 x 是 2 的幂,否则你的分子(就分子表示而言) * 2^{…}) 始终是 x 的倍数,而所有非 x 的倍数永远不会出现。

有什么帮助吗?伪随机数也可以(假设它们是均匀分布的)。

您还可以假设 x 很小,例如 x<2^8, if it helps.

python python-3.x numpy random uniform-distribution
1个回答
4
投票

您可以将端点调整为最大值之后的下一个浮点数:

import numpy as np

def uniform_with_endpoint(low=0, hi=1, size=None):
  return np.random.uniform(low, np.nextafter(hi, np.inf), size=size)

这给出了均匀分布,其中

hi
包含在可能的结果中。

© www.soinside.com 2019 - 2024. All rights reserved.