2012-04-20 58 views
3

假设我有一个值数组nameArr = ['josh','is','a','person'],并且我想要一个像arrayLocation(nameArr,['a','is'])这样的函数返回[2 1]Python/numpy:获取数值列表的数组位置

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

回答

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]),)] 
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

此外,它总是返回该项目的第一个索引,如果该项目在列表中多次。 – agf 2012-04-20 20:23:29

2

如果数组很大,做的位置很多次,你可以创建值映射到它的指数第一的字典:

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

鉴于可扩展性是衡量质量的标准,这是迄今为止最好的答案。 – Grr 2017-08-14 19:17:46

1

东西如:

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