在 python 中的长向量中找到低于某个值的最大值

find the biggest value below a certain value in a long vector in python

您好,我有一个很长的 numpy 向量 (1000000+) maxy1,里面填满了整数。向量按升序排序。现在我还有另一个整数 val。现在我想在 val 下面的 maxy1 中找到最高的数字 我所做的是:

idx = maxy1[np.where(maxy1 < val)[0][-1]]

但是太慢了,我必须重复此操作 10000 次并且它占用了 运行 时间的 94%。有什么让它更快的想法吗?

对于这类任务,我建议您使用 np.searchsorted:

import numpy as np

# setup
maxy1 = np.array([4, 5, 6, 7, 8, 9])
val = 7

# does a binary search
res = np.searchsorted(maxy1, val)
print(maxy1[res - 1])

输出

6

来自文档:

Binary search is used to find the required insertion points.

与您当前的线性方法 O(N).