- 可以在区间 (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,有没有办法确保我可以接近 1 和 0?
- 可以在区间 (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,有没有办法确保我可以接近 1 和 0?
首先,请注意在 上np.random.uniform
返回均匀分布的随机数[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)