我有一个numpy数组,看起来像这样:
myarray = ['a', 'b', 'c', 'd', 'e', 'f']
我想返回'b', 'c', 'd'
的索引数组,如下所示:
myind = [1,2,3]
我以后需要这个indices数组才能在循环中使用它。我使用的是Python 2.7。谢谢大家
答案 0 :(得分:1)
您可以使用np.searchsorted
-
In [61]: myarray = np.array(['a', 'b', 'c', 'd', 'e', 'f'])
In [62]: search = np.array(['b', 'c', 'd'])
In [63]: np.searchsorted(myarray, search)
Out[63]: array([1, 2, 3])
如果myarray
没有按字母顺序排序,我们需要使用附加参数sorter
,就像这样 -
In [64]: myarray = np.array(['a', 'd', 'b', 'e', 'c', 'f'])
In [65]: search = np.array(['b', 'c', 'd'])
In [67]: sidx = np.argsort(myarray)
In [69]: sidx[np.searchsorted(myarray, search, sorter=sidx)]
Out[69]: array([2, 4, 1])
答案 1 :(得分:1)
如果您的数组不包含任何重复项,那么np.searchsorted应该可以解决问题。如果你的数组包含重复项,那么你必须使用np.argwhere 例子:
input_array = np.array(['a','b','c','d','e','f','a'])
search = np.array(['a','b','c'])
np.searchsorted(input_array, search)
output >> array([0, 1, 2])
np.argwhere(input_array == 'a')
output >> array([[0],[6]])
有关更通用的解决方案,您可以
np.concatenate( (np.argwhere(input_array == 'a') ,
np.argwhere(input_array == 'b'),
np.argwhere(input_array == 'c') ) )
output >> array([[0],[6],[1],[2]])