2012-03-07 1 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()를 호출 할 수 있습니다. 내 PC에

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

관련 문제