5

あるしきい値を超える数値の1D配列のすべての値のインデックスを抽出しようとしています。配列は1e9longのオーダーです。

私のアプローチは次のとおりですNumPy

idxs = where(data>threshold) 

これには20分以上かかりますが、これは許容できません。この機能を高速化するにはどうすればよいですか?または、より高速な代替手段はありますか?

(具体的には、10.6.7、1.86 GHz Intel、4GBRAMを実行しているMacOS Xでは、それ以外のことは何もしません。)

4

1 に答える 1

6

マスク配列を試してください。これにより、同じデータのビューが作成されます。

したがって、構文は次のようになります。

 b=a[a>threshold]

bは(whereとは異なり)新しい配列ではなく、要素がインデックス内のブール値と出会う場所のビューです。

例:

import numpy as np
import time

a=np.random.random_sample(int(1e9))

t1=time.time()
b=a[a>0.5]
print(time.time()-t1,'seconds')

私のマシンでは、それは印刷されます22.389815092086792 seconds


編集

np.whereでも同じことを試しましたが、同じくらい高速です。私は疑わしいです:これらの値を配列から削除していますか?

于 2013-02-09T21:41:30.120 に答える