a
和 b
是两个已排序且不含重复元素的 Numpy 整数数组,其中 b
是 a
的一个子集。我需要找到每个 b
元素在 a
中的索引。是否有一种高效的 Numpy 函数可以帮助我避免使用 Python 循环?(实际上,这些数组是
pandas.DatetimeIndex
和 Numpy datetime64
类型,但我想这并不影响答案。)numpy.searchsorted()
可以用来实现这个功能:
In [15]: a = np.array([1, 2, 3, 5, 10, 20, 25])
In [16]: b = np.array([1, 5, 20, 25])
In [17]: a.searchsorted(b)
Out[17]: array([0, 3, 5, 6])
b
进行排序,并在a
上使用二分搜索。这意味着它的时间复杂度为O(n logn),而不是O(n)。
searchsorted()
解决了一个更一般的问题,因此不能是O(n)。 - NPE