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 

Теперь у вас уже есть хватка координаты xx и yy и точек данных в пределах этого ss, то вы можете сделать цветные участки.