所以根据这里的numpy文档:https://docs.scipy.org/doc/numpy-1.12.0/reference/generated/numpy.random.uniform.html,他们说生成的随机值属于集合[lower,upper],即所有值都>> =低,低于upper。有没有办法让这个更严格,即所有的值都是>降低?我有一个特殊情况,我想确保所有随机值介于0和k之间,但不应该等于0,因为这将导致我的程序崩溃。任何可以帮助我的解决方法/其他库?
答案 0 :(得分:3)
从np.ranodm.uniform(0,k)
调用实际获得0的几率实际为零。如果你想保证它,你可以设置一个非常小的较低值。
epsilon = np.finfo(np.float).eps
np.random.uniform(epsilon, k)
修改强>
对于我的机器,epsilon
为2.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
时才会有用。