配列の値が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]
ところで、index
はValueError
を発生させます。したがって、リストにない要素をindexメソッドに渡したい場合は、エラーを適切に処理する必要があります。
:
d = dict(zip(nameArr, range(len(nameArr))))
items = ['a','is']
print [d.get(x, None) for x in items]
品質の尺度としてのスケーラビリティを考えると、ここではこれが最善の答えです。 – Grr
何かを次のようになります。
>>> f_idxs = np.ravel([np.where(master_data==i)[0] for i in search_list])
また、アイテムがリストに複数回含まれている場合、アイテムの最初のインデックスも常に返します。 – agf