値の配列があり、を返すnameArr = ['josh','is','a','person']
ような関数が必要だとします。arrayLocation(nameArr,['a','is'])
[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 メソッドに提供する場合は、エラーを適切に処理する必要がある場合があります。
配列が大きく、何度も場所を指定する場合は、最初に値をそのインデックスにマップする dict を作成できます。
d = dict(zip(nameArr, range(len(nameArr))))
items = ['a','is']
print [d.get(x, None) for x in items]