2013-02-09 11 views
6

いくつかのしきい値を超える数字の1D配列のすべての値のインデックスを抽出しようとしています。配列の長さは1e9です。NumPy'sのスピードアップ機能

私のアプローチはNumPyで次のようである:

idxs = where(data>threshold) 

これは受け入れられない上向きに20分のものを取ります。この機能をどのようにスピードアップできますか?または、より速い選択肢がありますか?

(具体的には、それは1.86 GHzのIntel、4ギガバイトのRAM他に何もしない、10.6.7を実行しているのMac OS X上で長いことかかります。)

+0

np.whereを実行したり、しきい値を下回った値を削除するのに20分かかりますか? –

+0

np.whereを実行するのに20分かかります – mac389

+0

辞書から各変数を呼び出すことは重要ですか?私。 'data'は本当に' data ['timeseries'] 'であり、閾値は実際には' data [threshold] [spikes] 'です。私は2番目の変数がスカラーであると確信しています。 – mac389

答えて

4

mask arrayを試してみてください。これにより、同じデータのビューが作成されます。

ので、構文は次のようになります。

b=a[a>threshold] 

bが新しい配列(ここでとは違って)が、要素がインデックスにブール値を満たすの観点ではありません。

例:私のマシン上で

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と同じことを試みたが、それだけの速さです。私は疑いがあります:配列からこれらの値を削除していますか?

+0

私がそうしているのであれば、それは意図的ではありません。私の構文はあなたのものと同じです。どのように私は何かを削除することができますか?私はそれが遅い時間を説明することに同意します。 – mac389

関連する問題