假设我有一个值数组,nameArr = ['josh','is','a','person']
并且我想要一个类似arrayLocation(nameArr,['a','is'])
return的函数[2 1]
。
该功能是否已经存在,如果不存在,我如何有效地实现它?
使用 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]
顺便说一句,如果元素不在列表中,则index
引发。ValueError
因此,如果您想将不在列表中的元素提供给 index 方法,您可能需要适当地处理错误。
如果数组很大,并且多次定位,您可以创建一个字典,首先将值映射到它的索引:
d = dict(zip(nameArr, range(len(nameArr))))
items = ['a','is']
print [d.get(x, None) for x in items]
就像是:
>>> f_idxs = np.ravel([np.where(master_data==i)[0] for i in search_list])