Python / numpy:获取值列表的数组位置

时间:2012-04-20 20:00:14

标签: python numpy scipy

假设我有一组值nameArr = ['josh','is','a','person'],我希望像arrayLocation(nameArr,['a','is'])这样的函数返回[2 1]

该功能是否已经存在,如果不存在,我该如何有效地实现它?

4 个答案:

答案 0 :(得分:6)

使用numpy.where

In [17]: nameArr = np.array(['josh','is','a','person'])

In [18]: [np.where(nameArr==i) for i in ['a','is']]
Out[18]: [(array([2]),), (array([1]),)]

答案 1 :(得分:3)

列表包含您可以使用的index方法。

>>> nameArr = ['josh','is','a','person']
>>> # Using map
>>> map(nameArr.index, ['a', 'is'])
[2, 1]
>>> # Using list comprehensions
>>> [nameArr.index(x) for x in ['a', 'is']]
[2, 1]

BTW,如果元素不在列表中,index会引发ValueError。因此,如果要将不在列表中的元素提供给索引方法,则可能需要适当地处理错误。

答案 2 :(得分:2)

如果数组很大并且多次定位,你可以创建一个dict,首先将值映射到它的索引:

d = dict(zip(nameArr, range(len(nameArr))))
items = ['a','is']
print [d.get(x, None) for x in items]

答案 3 :(得分:1)

类似的东西:

>>> f_idxs = np.ravel([np.where(master_data==i)[0] for i in search_list])