我正在尝试用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
。大约有700万个数据集。我首先想要在这些网格点中分配数据,然后在每个网格中取平均值。最后我将使用平均s
来做地图。任何人都有任何想法如何有效地分配网格点数据并取平均值?
我知道ROOT TH2F
(这是一款适用于高能社区的强大软件)可以处理它,但我想把它写成pythonic。感谢。
答案 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
现在您已经拥有了抓握坐标xx
和yy
以及其中的数据点ss
,然后您可以制作颜色图。