4
a
和b
是兩個Numpy整數數組。他們排序,沒有重複。 b
是a
的子集。我需要找到b
的每個元素的a
索引。是否有一個有效的Numpy函數可以幫助,所以我可以避免python循環?在Numpy數組中找到多個值
(實際上,陣列的pandas.DatetimeIndex
和numpy的datetime64
,但我想這不會改變答案。)
a
和b
是兩個Numpy整數數組。他們排序,沒有重複。 b
是a
的子集。我需要找到b
的每個元素的a
索引。是否有一個有效的Numpy函數可以幫助,所以我可以避免python循環?在Numpy數組中找到多個值
(實際上,陣列的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)。如果這還不夠好,總會有Cython。 :-)
非常好。從我+1。 – mgilson 2013-03-04 15:38:39
我甚至不會認爲他們需要在這裏進行二分搜索......在假設兩者都已排序的情況下,您可以輕易地說服自己,這可以在O(N)時間完成。 (考慮合併排序的合併階段)。我很有興趣看看在這些假設下,python實現是否能夠勝過這個。 – mgilson 2013-03-04 15:46:38
@mgilson:你很對,OP的問題可以在O(n)中解決。我所說的是'searchsorted()'解決了一個更普遍的問題,因此不能是O(n)。 – NPE 2013-03-04 15:47:43