2012-08-25 30 views
6

私はnumpyのマスター配列を持っています。繰り返しの要素を持つ別の配列の検索値が与えられた場合、これらの検索値のインデックスをマスター配列に生成する必要があります。numpy配列内の値リストのインデックスを見つける

例:マスター配列は、[1,2,3,4,5]、検索配列である[4,2,2,3]

対処:[3,1,1,2]

効率的にこれを行う "ネイティブ" numpy関数はありますか(Pythonの速度ではなくCの速度での意味)?

私は以下の解決策を知っていますが、まずそれはPythonのリストの理解であり、次に2のインデックスを2回検索します。私は、ソート、バイナリ検索に頼る必要がある場合

ma = np.array([1,2,3,4,5]) 
sl = np.array([4,2,2,3]) 
ans = [np.where(ma==i) for i in sl] 

また、私は最後の手段としてそれを行います(駄洒落はレベルのすべての種類のものではありません)。私はnumpyのライブラリから何か基本的なものが欠けているかどうかを調べることに興味があります。これらのリストは非常に大きいので、パフォーマンスが最も重要です。

ありがとうございました。

編集: 投稿する前に、私は悲惨な結果を以下しようとしたと思います:

[np.searchsorted(ma,x) for x in sl] 

@pierreによって投稿ソリューションをはるかにパフォーマンスとまさに私が探していたものです。

答えて

14

np.searchsortedはあなたのために働くでしょうか?

>>> master = np.array([1,2,3,4,5]) 
>>> search = np.array([4,2,2,3]) 
>>> np.searchsorted(master, search) 
array([3, 1, 1, 2]) 
+0

絶対に!ちょうどあなたのコードのプロファイリングを終了し、それは素晴らしい作品です。私の質問を編集して結果を投稿します。 – Fenchurch

関連する問題