首页 > 解决方案 > 根据 for 循环中的位置将直方图存储在一个大数组中

问题描述

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

我得到的错误是:' 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 )

提前致谢!

标签: pythonarrayshistogrampyroot

解决方案


在这里和其他地方,您正在覆盖hist指向您正在构建的大型“数组”的变量:

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 类添加一个方法以返回一个列表,但这样做会很奇怪。)

如果您想要一个大的、可索引的直方图“数组”,那么这些直方图都必须位于最终的叶节点上。


推荐阅读