【发布时间】:2016-10-13 13:07:37
【问题描述】:
我指的是一个类似的问题:Find indices of a list of values in a numpy array
在这种情况下,我们有一个已排序的主数组和另一个我们想要在主数组中查找索引的数组。
master = np.array([1,2,3,4,5])
search = np.array([4,2,2,3])
建议的解决方案是:
>>> master = np.array([1,2,3,4,5])
>>> search = np.array([4,2,2,3])
>>>np.searchsorted(master, search)
array([3, 1, 1, 2])
但是如果master没有排序呢? 例如,如果我有两个这样的数组,其中第一个没有排序:
>>>master = np.array([2,3,5,4,1])
>>>search = np.array([3,2,1,4,5])
我明白了:
>>> np.searchsorted(master, search)
array([1, 0, 0, 2, 5])
但我想:
array([1,0,4,3,2])
即在 master 中搜索项的索引。
如何使用 numpy 的本机函数获取它们?(不使用 [np.where(master==i) for i in search])
谢谢
编辑: 在这种情况下,搜索数组是 master 的排列。然后我想找到master的索引是如何排列的,以给出一个像search这样的排列数组。
一般情况下,搜索数组包含一些可能包含或不包含在主文件中的项目,例如:
>>>master = np.array([2,3,5,4,1])
>>>search = np.array([1,4,7])
【问题讨论】:
-
这是一个 XY 问题吗?您只是想找到给定数组的 permutation 吗?因为这很容易做到。
-
那么你想避免排序吗?结果不是您所期望的,因为
searchsorted背后的算法假定输入是经过排序的(就像在二进制搜索中一样)。 -
在我的具体情况下,search 是 master 的排列(那么我的意思是找到导致搜索数组的 master 排列的索引)