从列表中选择单个浮动

时间:2018-12-13 23:06:34

标签: python numpy floating-point

我有一个从0到1递增生成的浮点列表。我需要对选定的浮点数进行操作,例如在0.25、0.5、0.75附近进行选择。但是生成的浮点数可以有任意数量的小数位,然后重复,例如 .......... 0.50001,0.51125,0.57466459,0.5925,0.5925,0.634,..........

我只需要从0.5(任何人都可以)中选择一个,其他季度也应如此。一个虚构的例子,

list_of_floats = my_some_function()
 for i in list_of_floats:
     if i is near 0.5:
        do_something()

我尝试过

list_of_floats = my_some_function()
done_once = False
 for i in list_of_floats:
     if 0.5 < i < 0.6 and done_once is False:
        do_something()
        done_once = True

这种类型适用于0.5,但我还需要处理其他检查点(0.25、0.75等)。必须有更好的方法来做到这一点。请帮忙。

3 个答案:

答案 0 :(得分:3)

我将从检查点列表和“接近”的一些阈值开始(在顶层或如果每个检查点的“附近”有所不同,则与每个检查点配对)。您只需考虑列表中的第一个检查点,并在点击时将其从列表中弹出,即可利用按相同顺序排序的数据和检查点:

checkpoints = [.25, .5. .75]
for i in list_of_floats:
    if abs(i - checkpoints[0]) < .1:
        do_something()
        checkpoints.pop(0)
    if not checkpoints:
        break

答案 1 :(得分:1)

我不确定您要做什么,但听起来您正在寻找np.isclose。例如,如果要查找数组中所有介于0.01到0.5之间的浮点数,则可以使用:

list_of_floats = np.array([0.50001, 0.51125, 0.57466459, 0.5925, 0.5925, 0.634])

# note that atol is the tolerance within which you want to select your floats
>>> list_of_floats[np.isclose(0.5, list_of_floats, atol = 0.01)]
array([0.50001])

或者,因为您只想要一个,而且任何一个都想要,所以选择第一个:

>>> list_of_floats[np.isclose(0.5, list_of_floats, atol = 0.01)][0]
0.50001

答案 2 :(得分:0)

如果您希望该值最接近0.5,则可能会出现以下情况:

import numpy

floats = numpy.array([0.1, 0.3, 0.48, 0.51, 0.55, 0.72, 0.8])

higher = numpy.where(floats > 0.5)
rest = numpy.where(floats[higher] < 0.6)
possibilities = floats[higher][rest]
print(min(possibilities))
>>>0.51