2016-06-23 1 views
0

세 번째 변수로 정의 된 색상으로 2D 좌표로 맵을 작성하려고합니다. 이미 다음 명령에 의해 그리드를 정의 :2D 맵 그리드에서 데이터를 분산하고 평균을 취하는 방법

b_step = np.linspace(-75,90,12) 
l_step = np.linspace(0,360,25) 
grid = [(x,y) for x in b_step for y in l_step] 

는 좌표 내 데이터 세트의 세 가지 변수 하나가 b입니다 l을,있다, 실제 데이터는 s라고합니다. 약 7 백만 개의 데이터 세트가 있습니다. 먼저 그리드 지점에 데이터를 배포하고 각 그리드 내에서 평균을 취하고 싶습니다. 그런 다음 마침내 평균 s을 사용하여지도를 작성합니다. 누구든지 그리드 지점에 데이터를 효율적으로 배포하고 평균을 취하는 방법에 대한 아이디어가 있습니까?

저는 고 에너지 커뮤니티를위한 강력한 소프트웨어 인 ROOT TH2F을 알고 있습니다. 그러나 그것을 더 파이썬 적으로 쓰고 싶습니다. 감사.

답변

0

ROOT TH2F는 효율적으로 처리하는 가장 좋은 방법입니다. 두 개의 TH2F 히스토그램을 만들면 하나는 데이터를 추적하고 다른 하나는 총 개수를 추적 한 다음 각 그리드 지점의 평균값을 계산할 수 있습니다. 이에 대한 파이썬 코드는 다음과 같습니다 :

from ROOT import TH2F, gStyle, TCanvas 

##### if you want equally distributed grid points. 
#h1 = TH2F('h1','h1',l_num,0.0,360.0,b_num,-90.0,90.0) 
#h2 = TH2F('h2','h2',l_num,0.0,360.0,b_num,-90.0,90.0) 

##### if you want non-equally distributed grid points. 
xBins = 37 
yBins = 17 
xEdges = np.linspace(-185,185,38) 
yEdges = np.array([-105.0,-75.0,-60.0,-45.0,-30.0,-15.0,15.0,35.0,40.0,45.0,50.0,55.0,60.0,65.0,70.0,75.0,80.0,100.0]) 
h1 = TH2F('h1','h1',xBins,xEdges,yBins,yEdges) 
h2 = TH2F('h2','h2',xBins,xEdges,yBins,yEdges) 

for i in range(data_size): 
    h1.Fill(x[i],y[i],signal) 
    h2.Fill(x[i],y[i],1) 

for ii in range(1,h1.GetNbinsX()+1): 
    for jj in range(1,h1.GetNbinsY()+1): 
     ss = h1.GetBinContent(ii,jj) 
     nn = h2.GetBinContent(ii,jj) 
     xx = h1.GetXaxis().GetBinCenter(ii) 
     yy = h1.GetYaxis().GetBinCenter(jj) 
     mean = ss/nn 

지금 이미 그립, 당신은 색상 플롯을 만들 수 있습니다 그것은 ssxxyy, 데이터 포인트를 조정합니다.

관련 문제