考虑给定的间隔,找到更接近的值 - Python

时间:2013-09-23 17:50:45

标签: python math

我必须建立一种直方图,带有给定的箱子(我不知道这是否是调用它们的最佳名称)。 举例说明:

这些箱子是:

-0.15 | -0.10 | -0.05 | 0.0 | 0.05 | 0.10 | 0.15

作为输入,我有一个矩阵,其值在-0.16,0.16之间,例如, 所以,如果我读了0.0884,我必须把它算作0.10。 我知道,为此,我可以验证这个值适合的范围,即[0.05,0.10]。我可以计算值与其上限和下限之间的差异(绝对值中的每个值)。因此,该值将与具有最小差异的bin一样计数。 但是我找到了如此简单的代码来完成Python中非常复杂的事情,我知道是否有一种简单的方法可以做到这一点。

感谢。

2 个答案:

答案 0 :(得分:4)

def get_bin(n, step=0.05):
    return step * round(n / step)

示例:

>>> get_bin(0.0884)
0.1
>>> get_bin(-0.027)                                                                                                   
-0.05
>>> get_bin(-0.023)                                                                                                   
-0.0

此方法在此处有详细描述:https://stackoverflow.com/a/2272174/505154

答案 1 :(得分:0)

你想要一个直方图,所以我假设你想在一个有序的二进制列表中分配点。 所以这里:

bins = ((-0.15,[]), (-0.10,[]), (-0.05,[]), (0.00,[]), (0.05,[]), (0.10,[]), (0.15,[]))

def store(point):
    for bin in bins:
        if point < bin[0]:
            bin[1].append(point)
            return
    bins[len(bins)-1][1].append(point)

store(0.0884)

bins