2012-03-07 49 views
2

我需要計算網格點數據的大型多維矩陣上的標準偏差和其他統計量。例如:任何方式來優化numpy stats函數(例如,通過numexpr)?

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 

結果在我的電腦是:

0.511926329834 
0.273098421142 

,因爲所有的數據都在連續內存的最後軸,數據訪問將會更有效地利用CPU緩存。

+0

感謝您的提示。對於延遲迴復感到抱歉。最後的軸技巧有所幫助,但我認爲多處理可能是最好的答案。 – vulture 2012-09-13 06:36:59

相關問題