如何在2D地图网格中分配数据并取平均值

时间:2016-06-23 21:43:01

标签: python dictionary grid coordinates

我正在尝试用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]

我的数据集中有三个变量,一个是bl,它们是坐标,真实数据称为s。大约有700万个数据集。我首先想要在这些网格点中分配数据,然后在每个网格中取平均值。最后我将使用平均s来做地图。任何人都有任何想法如何有效地分配网格点数据并取平均值?

我知道ROOT TH2F(这是一款适用于高能社区的强大软件)可以处理它,但我想把它写成pythonic。感谢。

1 个答案:

答案 0 :(得分:0)

ROOT TH2F是有效处理它的最佳方式。如果创建两个TH2F直方图,一个跟踪数据,另一个跟踪贡献的总数,则可以计算每个网格点的平均值。 python代码如下:

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

现在您已经拥有了抓握坐标xxyy以及其中的数据点ss,然后您可以制作颜色图。