3

假设我有一个值数组,nameArr = ['josh','is','a','person']并且我想要一个类似arrayLocation(nameArr,['a','is'])return的函数[2 1]

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

4

4 回答 4

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]),)]
于 2012-04-20T20:10:00.867 回答
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]

顺便说一句,如果元素不在列表中,则index引发。ValueError因此,如果您想将不在列表中的元素提供给 index 方法,您可能需要适当地处理错误。

于 2012-04-20T20:02:32.840 回答
2

如果数组很大,并且多次定位,您可以创建一个字典,首先将值映射到它的索引:

d = dict(zip(nameArr, range(len(nameArr))))
items = ['a','is']
print [d.get(x, None) for x in items]
于 2012-04-21T14:00:22.047 回答
1

就像是:

>>> f_idxs = np.ravel([np.where(master_data==i)[0] for i in search_list])
于 2017-06-29T19:14:57.160 回答