将笨拙数组JaggedArray的内容和偏移量嵌套到嵌套的JaggedArray中

问题描述 投票:2回答:1

我正在尝试使用出色的uprootawkward-array来读取存储在TTree中的一些分析数据。我知道ROOT不会以列格式写入嵌套向量(即std::vector<std::vector<int>>),但是在this discussion之后,我将树输出修改为包含两个单独的分支:一个带有内容的std::vector<int>,另一个是[ C0]和偏移量。内容向量在填充树之间多次被推入其中。每次输入值时,内容向量的大小就会存储在偏移量中。

我的想法是,当我阅读树时,我将通过嵌套的std::vector<int>重新创建所需的结构。但是,在阅读尴尬的数组文档时,我似乎无法找出在不循环使用python的情况下构造此嵌套JaggedArray的正确方法。 JaggedArray需要一维索引,这意味着锯齿状的索引必须变平,然后失去其结构。其他fromoffsets似乎都不适合。下面的示例使用了一个生成器,由于python中的循环,我认为它会相当慢。有没有更好的方法来构造classmethod?还是将数据存储在树中的更好方法?

JaggedArray

谢谢!

python physics uproot awkward-array
1个回答
0
投票

您有正确的主意,但是最终,没有一种方法可以将锯齿状的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() 转换为没有“ for”循环的双锯齿状数组。数据的结构需要它。

© www.soinside.com 2019 - 2024. All rights reserved.