我正在尝试使用优秀的uproot
并awkward-array
读取存储在 TTree 中的一些分析数据。我知道 ROOT 不会std::vector<std::vector<int>>
以柱状格式编写嵌套向量(即。),但是在讨论之后,我修改了我的树输出以包含两个单独std::vector<int>
的分支:一个包含内容,一个std::vector<int>
包含偏移量。内容向量在填充树之间多次将值推入其中。每次推入值时,内容向量的大小都会存储在偏移量中。
JaggedArray
我的想法是,当我阅读树时,我将通过嵌套重新创建我需要的结构。但是,通过阅读笨拙的数组文档,我似乎无法找到正确的方法来构建这个嵌套JaggedArray
而不在 python 中循环。fromoffsets
需要一维索引,这意味着锯齿状索引必须变平,然后失去其结构。其他classmethod
s 似乎都不适合。下面的示例使用了一个生成器,由于在 python 中循环,我认为它会相当慢。有没有更好的方法来构建JaggedArray
?或者更好的方法将数据存储在树中?
import awkward as ak
all_jagged_indices = ak.fromiter([[0, 1, 4], [0, 1, 2, 3]])
all_constituents = ak.fromiter([[12, 14, 3, 4], [2, 8, 3]])
output = ak.fromiter(
(ak.JaggedArray.fromoffsets(jagged_indices, constituents)
for jagged_indices, constituents in
zip(all_jagged_indices, all_constituents))
)
expected = ak.fromiter([[[12], [14, 3, 4]], [[2], [8], [3]]])
assert (output == expected).all().all().all()
谢谢!