在 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).
您好,我有一个很长的 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).