12

私は派手なマスター配列を持っています。繰り返し要素を持つ検索値の別の配列が与えられた場合、これらの検索値のインデックスをマスター配列に生成したいと考えています。

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

解: [3,1,1,2]

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

私は次の解決策を知っていますが、最初に、それは python リスト内包表記であり、2 番目に、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 によって投稿されたソリューションは、はるかにパフォーマンスが高く、まさに私が探していたものです。

4

1 に答える 1

23

あなた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])
于 2012-08-25T14:52:12.510 に答える