Python:获取小于给定数字的最后一个元素的索引

Mar*_*rio 5 python numpy-ndarray

假设我有以下某个测量的时间点的 numpy 数组,可以假设它是从小到大排序的:

time_points = np.array([0.4, 0.8, 1.2, 2.0, 2.4, 2.8, 3.2, 3.6])
Run Code Online (Sandbox Code Playgroud)

我想找到最后一个小于或等于三的元素的索引。在此示例中,元素为2.8,索引为5。所以我想要一个Python代码来给我这个5。相对较短的代码可以做到这一点:

index = 0
while time_points[index] <= 3:
    index += 1
index -= 1
Run Code Online (Sandbox Code Playgroud)

但是我的time_points数组可能会变得很长,我想知道是否有更快的方法,就像index()只用一行执行此操作的方法一样?就像是

>>> time_points = np.array([0.4, 0.8, 1.2, 2.0, 2.4, 2.8, 3.2, 3.6])
>>> index = function(time_points, 3)
5
Run Code Online (Sandbox Code Playgroud)

或者可能使用多行代码,但使用该numpy库可以使操作更快。

提前致谢!

小智 5

numpy.searchsorted实际上正是您需要的函数。

它使用二分搜索来查找最近的点,每次都会将列表“切成”两半,并且只查看那一半。

可以这样使用,假设 arr 是列表。

>>> arr = np.array([0.4, 0.8, 1.2, 2.0, 2.4, 2.8, 3.2, 3.6])
>>> arr.searchsorted(3, 'right') - 1
5
>>> arr.searchsorted(2.8, 'right') - 1 
5 
>>> arr.searchsorted(0, 'right') - 1 # No greater item
-1
Run Code Online (Sandbox Code Playgroud)

我怀疑是否有更快的 numpy 方法,因为这是一个单行,并使用二分搜索,这通常是排序数组上最快的搜索方法。

  • 谢谢您的回答。我投了赞成票,但我的声誉不够高。我将其标记为解决方案,因为我感觉它确实是最佳选择。 (2认同)