Python 快速找到单个值将落入哪个直方图箱的方法?
我有一个示例直方图,其箱子如下所示:Python 快速找到单个值将落入哪个直方图箱的方法?,python,Python,我有一个示例直方图,其箱子如下所示: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 如果给我一个像5.6这样的值,我希望能够得到给定值将落入直方图中的bin列表的索引,因此在本例中,它将是I=4,即5。我还可以假设给定的值总是在箱子的范围内。我知道我可以通过一个循环来实现这一点,并进行一些比较检查,但是有没有更快的方法?我知道在Python中实现这一点的最快方法是使用。它会给你比你要寻找的值大一的值,所以你需要减去一 import bisect l = [1, 2, 3,
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
如果给我一个像
5.6
这样的值,我希望能够得到给定值将落入直方图中的bin列表的索引,因此在本例中,它将是I=4
,即5
。我还可以假设给定的值总是在箱子的范围内。我知道我可以通过一个循环来实现这一点,并进行一些比较检查,但是有没有更快的方法?我知道在Python中实现这一点的最快方法是使用。它会给你比你要寻找的值大一的值,所以你需要减去一
import bisect
l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
bisect.bisect(l, 5.6) - 1
# 4
对于较大的列表,它比python循环快几个数量级:
import bisect
l = list(range(100000))
n = 79587.6
%timeit next(x[0]-1 for x in enumerate(l) if x[1] > n)
# 8.33 ms ± 22.8 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit bisect.bisect(l, n) - 1
# 800 ns ± 0.769 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
虽然Mark建议使用对分,但我还想提到的是,在不导入的情况下使用next
value = 5.6
lis = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
next(x[0] - 1 for x in enumerate(lis) if x[1] > value)
# 4
如果5.6放在索引4的箱子里,那么0.6放在哪里?这个列表代表箱子,所以5.6放在索引4中意味着它在5到6之间。但这不是我要问的。0.6放入哪个箱子?我认为你的逻辑是错误的。根据你的逻辑,1-2进入了bin索引0,这就不会为小于1的值留下任何bin。我可以假设,只有给定的值会在bin的范围内,因此0.6不会是要求的值。给出的列表只是一个示例,只是为了说明我的问题。