Python:获取小于给定数字的最后一个元素的索引
Python: Get index of last element that is smaller than a given number
假设我有以下某个测量时间点的numpy数组,可以假设它是从小到大排序的:
time_points = np.array([0.4, 0.8, 1.2, 2.0, 2.4, 2.8, 3.2, 3.6])
我想找到小于或等于 3 的最后一个元素的 index。在此示例中,元素为 2.8
,索引为 5
。所以我想要一个 python 代码给我 5
。一个相对较短的代码可以做到这一点:
index = 0
while time_points[index] <= 3:
index += 1
index -= 1
但是我的 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
或者可能是多行代码,但它使用 numpy
库来加快操作速度。
提前致谢!
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
我怀疑是否有更快的 numpy 方法,因为这是单行的,并且使用二进制搜索,这通常是排序数组上最快的搜索方法。
假设我有以下某个测量时间点的numpy数组,可以假设它是从小到大排序的:
time_points = np.array([0.4, 0.8, 1.2, 2.0, 2.4, 2.8, 3.2, 3.6])
我想找到小于或等于 3 的最后一个元素的 index。在此示例中,元素为 2.8
,索引为 5
。所以我想要一个 python 代码给我 5
。一个相对较短的代码可以做到这一点:
index = 0
while time_points[index] <= 3:
index += 1
index -= 1
但是我的 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
或者可能是多行代码,但它使用 numpy
库来加快操作速度。
提前致谢!
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
我怀疑是否有更快的 numpy 方法,因为这是单行的,并且使用二进制搜索,这通常是排序数组上最快的搜索方法。