2012-03-07 16 views
2

格子点データの大きな多次元ndarrayで標準偏差やその他の統計を計算する必要があります。例:numpyprを使用してnumpy統計関数を最適化する方法はありますか?

import numpy as np 
# ... gridded data are read into g1, g2, g3 arrays ... 
allg = numpy.array([g1, g2, g3]) 
allmg = numpy.ma.masked_values(allg, -99.) 
sd = numpy.zeros((3, 3315, 8325)) 
np.std(allmg, axis=0, ddof=1, out=sd) 

は、私は、さまざまなウェブサイト上のnumexpr.evaluate()でnumpyの計算を包むのパフォーマンス上の利点を見てきましたが、私は(numexpr.evaluate中)(np.std実行する方法はないと思います)(私が間違っていれば私を修正してください)。 np.std()呼び出しを最適化できる他の方法はありますか?現在のところ、私のシステムで計算するのに約18秒かかります...何とか速くすることを望んでいます...

答えて

2

おそらく、複数のプロセスで計算を行うためにマルチプロセッシングを使うことができます。しかし、それを試みる前に、最後の軸に対してstd()を呼び出すことができるようにデータを再配置しようとすることができます。次に例を示します。

import numpy as np 
import time 
data = np.random.random((4000, 4000)) 

start = time.clock() 
np.std(data, axis=0) 
print time.clock() - start 

start = time.clock() 
np.std(data, axis=1) 
print time.clock() - start 

私のPC上の結果は次のとおりです。

0.511926329834 
0.273098421142 

すべてのデータが最後の軸のために連続したメモリにあるため、データへのアクセスがより効果的にCPUのキャッシュを使用します。

+0

チップをありがとう。返信が遅れて申し訳ありません。最後の軸のトリックは助けますが、私はマルチプロセッシングがおそらく最良の答えだと思います。 – vulture

関連する問題