使用 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)
- 可以在区间 (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)