在numpy数组中查找值列表的索引

Fen*_*rch 8 numpy

我有一个numpy主数组.给定另一个具有重复元素的搜索值数组,我想在主数组中生成这些搜索值的索引.

例如:主数组是[1,2,3,4,5],搜索数组是[4,2,2,3]

解决方案:[3,1,1,2]

是否存在"本地"numpy函数可以有效地执行此操作(意味着以C速度而不是python速度)?

我知道以下解决方案,但是,首先,它是一个python列表理解,其次,它将搜索2的索引两次.

ma = np.array([1,2,3,4,5])
sl = np.array([4,2,2,3])
ans = [np.where(ma==i) for i in sl]
Run Code Online (Sandbox Code Playgroud)

此外,如果我不得不求助于排序和二进制搜索,我将作为最后的手段(不是各种级别的双关语).我有兴趣发现我是否遗漏了numpy库中的基本内容.这些列表非常大,因此性能至关重要.

谢谢.

编辑:发布之前我尝试了以下结果:

[np.searchsorted(ma,x) for x in sl]
Run Code Online (Sandbox Code Playgroud)

@pierre发布的解决方案性能更高,正是我所寻求的.

Pie*_* GM 19

会对np.searchsorted你有用吗?

>>> master = np.array([1,2,3,4,5])
>>> search = np.array([4,2,2,3])
>>> np.searchsorted(master, search)
array([3, 1, 1, 2])
Run Code Online (Sandbox Code Playgroud)

  • 有未排序的版本吗? (3认同)
  • 如果未对母版进行排序,或者搜索中存在的值不在母版中,但小于母版中的最大值,则此方法可能无法很好地工作。例如,给定`master = master = np.array([2,1,3,5,4])`和`search = np.array([4,2,0,3])`,结果为np.searchsorted(master,search)将是array([3,2,0,2])`。 (2认同)