假设我有一组值nameArr = ['josh','is','a','person']
,我希望像arrayLocation(nameArr,['a','is'])
这样的函数返回[2 1]
。
该功能是否已经存在,如果不存在,我该如何有效地实现它?
答案 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])