Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 快速找到单个值将落入哪个直方图箱的方法?_Python - Fatal编程技术网

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不会是要求的值。给出的列表只是一个示例,只是为了说明我的问题。