在numpy中生成具有严格下界的随机数

时间:2018-01-22 13:34:17

标签: python numpy random

所以根据这里的numpy文档:https://docs.scipy.org/doc/numpy-1.12.0/reference/generated/numpy.random.uniform.html,他们说生成的随机值属于集合[lower,upper],即所有值都>> =低,低于upper。有没有办法让这个更严格,即所有的值都是>降低?我有一个特殊情况,我想确保所有随机值介于0和k之间,但不应该等于0,因为这将导致我的程序崩溃。任何可以帮助我的解决方法/其他库?

2 个答案:

答案 0 :(得分:3)

np.ranodm.uniform(0,k)调用实际获得0的几率实际为零。如果你想保证它,你可以设置一个非常小的较低值。

epsilon = np.finfo(np.float).eps
np.random.uniform(epsilon, k)

修改

对于我的机器,epsilon2.2204460492503131e-16。获取任何特定号码的机会应大致为1 / (1/epsilon)1 / 4503599627370496

例如,以下代码检查0.0的百万长度数组中出现的np.random.normal(0,1)

counter = 0
stop = False
while not stop:
    x = np.random.normal(0,1, size=1000000)
    stop = any(x==0.0)
    counter += 1
    print('\rIteration: {}   '.format(counter), end='')

我目前超过75,000次迭代而没有出现零。显然,这不是一个完美的测试,但它确实证明了实际获得零的微小机会。

答案 1 :(得分:1)

  

我想确保所有随机值介于0和k之间,但不应等于0

如果您的数字在low <= u < high范围内,则可以轻松将其转换为low < r <= high

r = high - np.random.uniform(0, high - low)

当然,只有在r允许high而不是low时才会有用。