尴尬的数组 ak.unzip 行为
awkward array ak.unzip behaviour
当我访问根文件并提取我想要的数据时,如下例所示:
events=uproot.open(filename)["btagana/ttree;6"]
jet_data=events.arrays(filter_name=["Jet_nFirstTrack","Jet_nLastTrack","Jet_pt","Jet_phi","Jet_eta"],library="ak")
这个数组的键的排序与用于过滤 keys.If 的列表的排序不同,我现在使用 ak.unzip():
jet_data=ak.unzip(jet_data)
排序是否可靠且可重现?如果我打开不同的根文件,我是否能够实现相同的“排序”
这其实是一个关于Uproot的问题。在这一行中:
>>> jet_data=events.arrays(filter_name=["Jet_nFirstTrack","Jet_nLastTrack","Jet_pt","Jet_phi","Jet_eta"],library="ak")
filter_name
只是一个过滤器,接受或拒绝来自 ROOT 文件的分支。这些分支在文件中有一个自然的顺序,输出可能就是那个顺序(因此在反复尝试时是稳定的,除非在某个时候涉及到 dict 并且你正在使用 Python <= 3.5)。
如果您想执行命令,请将您的分支名称列表作为 expressions
而不是 filter_name
传递。该参数具有不同的含义:expressions
可以是简单的公式; filter_name
可以有通配符——因此,像 *
这样的字符在每个字符中都有非常不同的含义!
或者,您可以在读取数组后通过使用字符串列表进行切片来重新排序字段。这样做不会影响性能——它只是重新排列元数据(完成时间不随数组的长度变化)。 This documentation 有一些示例(包括您在字段中选择字段的更复杂的情况,但简单的情况足以解决您的问题)。
编辑: 我应该补充一点,Awkward Arrays 中的记录字段具有可重现的顺序。它们不像 Python <= 3.5 中的字典那样不稳定的哈希图。它们实际上是两个等长列表:有序字段(即 ak.unzip
returns)和有序字段名称(ak.fields
returns)。名称是可选的——没有字段名称,记录变成元组。
当我访问根文件并提取我想要的数据时,如下例所示:
events=uproot.open(filename)["btagana/ttree;6"]
jet_data=events.arrays(filter_name=["Jet_nFirstTrack","Jet_nLastTrack","Jet_pt","Jet_phi","Jet_eta"],library="ak")
这个数组的键的排序与用于过滤 keys.If 的列表的排序不同,我现在使用 ak.unzip():
jet_data=ak.unzip(jet_data)
排序是否可靠且可重现?如果我打开不同的根文件,我是否能够实现相同的“排序”
这其实是一个关于Uproot的问题。在这一行中:
>>> jet_data=events.arrays(filter_name=["Jet_nFirstTrack","Jet_nLastTrack","Jet_pt","Jet_phi","Jet_eta"],library="ak")
filter_name
只是一个过滤器,接受或拒绝来自 ROOT 文件的分支。这些分支在文件中有一个自然的顺序,输出可能就是那个顺序(因此在反复尝试时是稳定的,除非在某个时候涉及到 dict 并且你正在使用 Python <= 3.5)。
如果您想执行命令,请将您的分支名称列表作为 expressions
而不是 filter_name
传递。该参数具有不同的含义:expressions
可以是简单的公式; filter_name
可以有通配符——因此,像 *
这样的字符在每个字符中都有非常不同的含义!
或者,您可以在读取数组后通过使用字符串列表进行切片来重新排序字段。这样做不会影响性能——它只是重新排列元数据(完成时间不随数组的长度变化)。 This documentation 有一些示例(包括您在字段中选择字段的更复杂的情况,但简单的情况足以解决您的问题)。
编辑: 我应该补充一点,Awkward Arrays 中的记录字段具有可重现的顺序。它们不像 Python <= 3.5 中的字典那样不稳定的哈希图。它们实际上是两个等长列表:有序字段(即 ak.unzip
returns)和有序字段名称(ak.fields
returns)。名称是可选的——没有字段名称,记录变成元组。