使用 np.random.uniform 最接近 (1,0) 的端点

Getting closest to endpoints of (1,0) using np.random.uniform

- 可以在区间 (0, 1] 上抽取随机数,即包括 1 使用:

import numpy as np
r = np.random.uniform(low=0.0, high=1.0, size=10)

但是,我想在区间 (0, 1) 上生成数字,即不包括 1 和 0。类似于:

r = np.random.uniform(low=0.0, high=1.0 - 2**-16, size=10)

可行,但理论上我能接近 1 和 0 有多近,有没有办法确保我能像接近 0 一样接近 1?

首先,请注意 np.random.uniform returns 在 [low, high) 上均匀分布的随机数,即包括 low 但不包括 high。所以我假设您想从样本中排除 0,而不是 1

就可以实际上 达到零的接近程度而言,这受限于计算机算法的精度。假设 NumPy 使用的 IEEE 浮点数,最接近但大于零的浮点数由下式给出:

>>> np.nextafter(0.0, 1.0) # Closest to 0.0 in direction of 1.0
5e-324

所以要在 (0, 1) 上生成数字,您可以这样做:

>>> np.random.uniform(low=np.nextafter(0.0, 1.0), high=1.0, size=10)