如何在给定间隔的间隔内进行随机抽样? 例如,我想在1到10之间进行单个随机抽样,但每个间隔为0.5。因此,当我进行采样时,它会给出值,例如5.5或2或8.5。
我试过了 np.random.random_integers(1,10) 但这只是给我整数的价值。 非常感谢您的帮助。
答案 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
来避免浮点错误。此外,arange
和linspace
具有不同的API。
答案 2 :(得分:0)
你可以这样做:
from random import randrange
random_number = randrange(2,21)*.5