12

我有一个 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]

此外,如果我不得不求助于排序和二分搜索,我将作为最后的手段(双关语并非适用于所有级别)。我有兴趣查找我是否缺少 numpy 库中的一些基本内容。这些列表非常大,因此性能至关重要。

谢谢。

编辑:在发布之前,我尝试了以下结果,结果很糟糕:

[np.searchsorted(ma,x) for x in sl]

@pierre 发布的解决方案性能更高,正是我想要的。

4

1 回答 1

23

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])
于 2012-08-25T14:52:12.510 回答