簡體   English   中英

以嚴格的下限在numpy中生成隨機數

[英]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)

編輯:

對於我的機器, epsilon2.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM