根据 for 循环中的位置将直方图存储在一个大数组中

Store histograms in a large array depending on location in for loop

我正在尝试将直方图存储在一个充满嵌套数组的数组中,这些嵌套数组是在多个循环中创建的。

我收到的错误是:“TH1F”对象没有属性 'append'

下面是代码工作原理的示例(简化版):

hist = []
for c in range 2:  
  hist.append([])

  for e in range 4: 
    hist[c].append([])
    hist_m = ROOT.TH1F("some name","some name",0,0.0,50.0)
    hist[c][e].append(hist_m)

    for z in range 8:
      hist[c][e].append([])
      hist_m = ROOT.TH1F("some name","some name",0,0.0,50.0)
      hist[c][e][z].append(hist_m)  #crashes here

      for pT in range 32:
        hist[c][e][z].append([])
        hist_m = ROOT.TH1F("some name","some name",0,0.0,50.0)
        hist[c][e][z][pT].append(hist_m)

我正在尝试将所有这些不同的直方图存储在这个大数组中,以便我稍后可以通过简单地使用索引在代码中使用它们。但我收到错误

'TH1F' object has no attribute 'append'

我不知道如何解决。有什么解决办法吗?

代码在这一行崩溃:

hist[c][e][z].append( hist )

提前致谢!

在这里和其他地方,您将覆盖您的 hist 变量,否则该变量将指向您正在构建的大 "array":

hist = ROOT.TH1F("some name","some name",0,0.0,50.0)

使用不同的名称...

编辑:由于您现在更改了命名,请考虑首先添加一个 TH1F:

hist[c][e].append(hist_m)

然后是一个新列表:

hist[c][e].append([])

所以现在列表 hist[c][e] 的第一个元素是 TH1F,第二个是新列表。即,您有:

[[[<ROOT.TH1F object ("some name") at 0x556fd65038d0>, []]]]

和零索引 (c == e == z == 0) 选择 TH1F。

您似乎设想的数据结构(如果没有进一步的索引发生,则索引既是直方图,但如果发生索引,则为列表)是行不通的。 (当然,您可以将 __getitem__ 方法添加到 TH1F class 到 return 列表,但这样做会很奇怪。)

如果你想要一个大的、可索引的、"array" 的直方图,这些直方图都必须在最后的叶节点上。