这适用于我在 python 中使用索引。
>>>from ROOT import *
>>>vec1 = std.vector('double')()
>>>vec2 = std.vector('double')()
>>>vec_vec = std.vector(std.vector('double'))()
>>>for i in range(3):
>>> vec1.push_back(i)
>>>for i in range(5):
>>> vec2.push_back(i)
>>>vec_vec.push_back(vec1)
>>>vec_vec.push_back(vec2)
>>>len(vec_vec)
2
>>>len(vec_vec[0])
3
>>>len(vec_vec[1])
5
>>>vec_vec[1][2]
2.0
在您的示例中,错误说:
TypeError: 'vector<vector<float> >' object is unindexable
调用构造函数 std.vector(type)() 后,您有不同的类型表明内存空间分配器正在工作。
>>>type(vec1)
<class 'ROOT.vector<double,allocator<double> >'>
>>>type(vec_vec)
<class 'ROOT.vector<vector<double,allocator<double> >,allocator<vector<double,allocator<double> > > >'>
要从 TTree 导入此类向量,请使用 setBranchAddress,如下例所示:
>>>tree = file.Get('tree')
>>>tree.SetBranchAddress("nested",vec_vec)
>>>N = tree.GetEntries()
>>>for i in range(N):
>>> vec_vec.clear()
>>> tree.GetEntry(i)
>>> print vec_vec[0][0]
另请注意,使用后这可能会明显更快
>>>tree.setBranchStatus('*',0)
>>>tree.setBranchStatus('nested',1)