我有一个*.root文件,我正试着用根(uproot4)将它读入Python。它看起来是这样的:
>>> data = up.open('file.root')
>>> data.keys()
['ring_sums;1', 'tpc_multiplicity;1', 'impact_parameter;1']
>>> data['ring_sums']
<TMatrixT<double> (version 4) at 0x0205b219d748>如何读取TMatrixT类型?使用.keys()、.values()和.items()不起作用。
>>> data['ring_sums'].values()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Model_TMatrixT_3c_double_3e__v4' object has no attribute 'values'将数据读出到笨拙的数组、pandas dataframe或numpy数组中的正确方法是什么?
发布于 2021-01-22 03:42:22
TMatrixT是一个Uproot没有任何专用代码的类(还没有吗?),但无论如何都可以读取它,因为它的"streamers“(反序列化指令)包含在根文件中。因此,它以一种相当通用的方式呈现。
可以在all_members (dict)中查找对象的所有成员数据,也可以使用member("memberName")方法仅提取一个成员数据。因此,例如,尝试
data['ring_sums'].member("fElements")因为TMatrixT::fElements似乎是相关的。它们可能会变成一个不整形的NumPy数组(或uproot.models.TArray,它是NumPy数组的一个子类)。您可能需要将其reshape为正确的形式,并且可能在其他成员(可能是属于超类的成员)中找到适当的形状。
如果您找到了一种使用TMatrixT对象的好方法,并且希望它变得自动化,可能是在values方法中,那么可以将其添加为pull request,或者将其描述为feature request for Uproot (一种新的“行为”)。
https://stackoverflow.com/questions/65833805
复制相似问题