繁体   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