python - 根据 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 )
提前致谢!
解决方案
在这里和其他地方,您正在覆盖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 类添加一个方法以返回一个列表,但这样做会很奇怪。)
如果您想要一个大的、可索引的直方图“数组”,那么这些直方图都必须位于最终的叶节点上。
推荐阅读
- laravel-5 - 如何仅在刀片中为空、零或空时隐藏表格部分,
- swift - 如何创建一个提取来总结属性之间的差异
- jquery - 如何在我的输入字段中将数字限制为 3?
- javascript - 尽管 observables 没有改变,但 MobX 在读取时完全重新计算?
- ruby - 如何使用 Ruby 将值填充到现有 PDF 中存在的输入元素?
- java - Java - 何时使用 JSR223 脚本执行基于 Java 的语言
- sql - 如何做结果和当前值的对角线减法
- wso2 - WSO2 身份服务器密钥管理器中的辅助 JDBC 用户存储的登录/角色/权限问题
- python - python重命名多个文件
- javascript - 如何专注于输入的第一个字段