簡體   English   中英

在給定間隔值的間隔內如何進行隨機采樣?

[英]How to do random sampling within interval with given interval value?

如何在給定間隔內進行隨機采樣? 例如,我想在1到10之間進行一次隨機抽樣,但每個間隔為0.5。 因此,當我進行采樣時,它將為我提供例如5.5或2或8.5的值。

我已經嘗試過np.random.random_integers(1,10),但這只是給我整數值。 謝謝您的幫助。

您可以編寫自己的函數,該函數可以縮放,生成隨機整數,然后進行不縮放。

from math import floor, ceil
from random import randint

def random_step(low, high, step):
    low_scaled = ceil(float(low)/step)
    high_scaled = floor(float(high)/step)
    return randint(low_scaled, high_scaled) * step

print random_step(3.0, 8.5, 0.5) # 4.5

輸出將始終是step的倍數。

您可以從numpy庫中使用linspace 這是一個例子:

>>> import numpy
>>> numpy.linspace(0.5, 10, 20)
array([  0.5,   1. ,   1.5,   2. ,   2.5,   3. ,   3.5,   4. ,   4.5,
         5. ,   5.5,   6. ,   6.5,   7. ,   7.5,   8. ,   8.5,   9. ,
         9.5,  10. ])
>>> range_of_numbers = numpy.linspace(0.5, 10, 20)
>>> random_number = numpy.random.choice(range_of_numbers, size=1)
>>> print random_number
[ 9.5]

linspace的結果集位於一個數組中,但是如果需要,您可以輕松地進一步處理它。 這是有關使用linspace更多文檔。


編輯

另一種選擇是使用Pylab的frange庫。 它是matplotlib的包裝,但是值得研究您要實現的解決方案。 這是使用frange的示例:

>>> import pylab
>>> pylab.frange(0.5,10,0.5)
array([  0.5,   1. ,   1.5,   2. ,   2.5,   3. ,   3.5,   4. ,   4.5,
         5. ,   5.5,   6. ,   6.5,   7. ,   7.5,   8. ,   8.5,   9. ,
         9.5,  10. ])

這是有關frange的更多文檔。


補充筆記

盡管可以使用arange ,但是請記住,這會導致浮點錯誤。 NumPy文檔建議使用linspace以避免浮點錯誤。 另外, arangelinspace具有不同的API。

你可以做:

from random import randrange

random_number = randrange(2,21)*.5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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