2

- 可以在区间 (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?

4

1 回答 1

1

首先,请注意在 上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)
于 2018-03-21T18:23:48.550 回答