a
和b
是两个Numpy整数数组。它们是有序的,没有重复。 b
是a
的子集。我需要在a
的每个元素的b
中找到索引。是否有一个有效的Numpy函数可以帮助,所以我可以避免python循环?
(实际上,数组是pandas.DatetimeIndex
和Numpy datetime64
,但我想它并没有改变答案。)
答案 0 :(得分:12)
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)。
如果这还不够好,总会有Cython。 : - )