假設我有一個值數組nameArr = ['josh','is','a','person']
,並且我想要一個像arrayLocation(nameArr,['a','is'])
這樣的函數返回[2 1]
。Python/numpy:獲取數值列表的數組位置
該功能是否已經存在,如果沒有,我該如何有效地實現它?
假設我有一個值數組nameArr = ['josh','is','a','person']
,並且我想要一個像arrayLocation(nameArr,['a','is'])
這樣的函數返回[2 1]
。Python/numpy:獲取數值列表的數組位置
該功能是否已經存在,如果沒有,我該如何有效地實現它?
使用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]),)]
列表有一個可以使用的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
如果元素是不是在列表中。因此,如果您想要將不在列表中的元素提供給索引方法,則可能需要適當地處理該錯誤。
如果數組很大,做的位置很多次,你可以創建值映射到它的指數第一的字典:
d = dict(zip(nameArr, range(len(nameArr))))
items = ['a','is']
print [d.get(x, None) for x in items]
鑑於可擴展性是衡量質量的標準,這是迄今爲止最好的答案。 – Grr 2017-08-14 19:17:46
東西如:
>>> f_idxs = np.ravel([np.where(master_data==i)[0] for i in search_list])
此外,它總是返回該項目的第一個索引,如果該項目在列表中多次。 – agf 2012-04-20 20:23:29