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

标签 python numpy-ndarray

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

time_points = np.array([0.4, 0.8, 1.2, 2.0, 2.4, 2.8, 3.2, 3.6])
我想找索引小于或等于 3 的最后一个元素。在这个例子中,元素是 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 方法,因为这是一个单行,并使用二进制搜索,这通常是排序数组上最快的搜索方法。

关于Python:获取小于给定数字的最后一个元素的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67313842/

相关文章:

numpy - 在另一个二维数组中查找 numpy 二维数组的行索引

python - 使用 FastAPI 进行套接字聊天系统?

python - 从 Pandas 数据框中删除包含重复数据的列?

python - 无法使用推文 [Lat-Lon] 抓取地理坐标

python - 解析 gff 文件,获取脚手架名称并创建一个新的数据框

Python np.asarray 不返回真实形状

python - Python 中 numpy 数组上交换行的表示法

python - 如何使用Python SDK在Azure上创建SQL Server?

python - 获取另一个 numpy 数组中一个 numpy 数组的索引

python - 为什么使用单元素 View 重复访问 numpy 数组会更快?