[英]Generating random numbers in numpy with strict lower bounds
因此,根據此處numpy的文檔: https : //docs.scipy.org/doc/numpy-1.12.0/reference/genic/numpy.random.uniform.html ,他們說生成的隨機值屬於集合[下,上限),即所有值均> =下限且小於上限。 有什么方法可以使這個范圍更嚴格,即所有值都>更低嗎? 我有一種特殊的情況,我想確保所有隨機值都在0到k之間,但不應該等於0,因為這會導致我的程序崩潰。 有什么解決方法/其他圖書館可以幫助我嗎?
從調用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
。
例如,以下代碼檢查在np.random.normal(0,1)
一百萬長度數組中出現的0.0
:
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次迭代,沒有發生零。 顯然,這不是一個完美的測試,但確實顯示了實際為零的微小機會。
我想確保所有隨機值都在0到k之間,但不應該等於0
如果您的數字在low <= u < high
范圍內,則可以輕松地將它們轉換為low < r <= high
:
r = high - np.random.uniform(0, high - low)
當然,這僅在允許r
包含high
但不包含low
情況下才有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.