0

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

垃圾箱是:

-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 中完成非常复杂的事情,以至于我想知道是否有一种简单的方法可以做到这一点。

谢谢。

4

2 回答 2

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

于 2013-09-23T18:03:03.453 回答
0

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

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
于 2013-09-23T18:25:37.183 回答