2012-04-20 165 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])