获取数组中的字符串索引

时间:2017-03-07 18:30:18

标签: arrays string python-2.7 numpy

我有一个numpy数组,看起来像这样:

myarray = ['a', 'b', 'c', 'd', 'e', 'f']

我想返回'b', 'c', 'd'的索引数组,如下所示:

myind = [1,2,3]

我以后需要这个indices数组才能在循环中使用它。我使用的是Python 2.7。谢谢大家

2 个答案:

答案 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]])