如何在给定间隔值的区间内进行随机抽样?

时间:2016-06-02 14:05:02

标签: python

如何在给定间隔的间隔内进行随机抽样? 例如,我想在1到10之间进行单个随机抽样,但每个间隔为0.5。因此,当我进行采样时,它会给出值,例如5.5或2或8.5。

我试过了     np.random.random_integers(1,10) 但这只是给我整数的价值。 非常感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

您可以编写自己的缩放函数,生成随机整数,然后取消缩放。

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的倍数。

答案 1 :(得分:1)

您可以使用linspace库中的numpy。这是一个例子:

>>> 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。

答案 2 :(得分:0)

你可以这样做:

from random import randrange

random_number = randrange(2,21)*.5