首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Python语言中使用uproot来读取TMatrixT?

如何在Python语言中使用uproot来读取TMatrixT?
EN

Stack Overflow用户
提问于 2021-01-22 02:40:21
回答 1查看 56关注 0票数 1

我有一个*.root文件,我正试着用根(uproot4)将它读入Python。它看起来是这样的:

代码语言:javascript
复制
>>> 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()不起作用。

代码语言:javascript
复制
>>> 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数组中的正确方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-22 03:42:22

TMatrixT是一个Uproot没有任何专用代码的类(还没有吗?),但无论如何都可以读取它,因为它的"streamers“(反序列化指令)包含在根文件中。因此,它以一种相当通用的方式呈现。

可以在all_members (dict)中查找对象的所有成员数据,也可以使用member("memberName")方法仅提取一个成员数据。因此,例如,尝试

代码语言:javascript
复制
data['ring_sums'].member("fElements")

因为TMatrixT::fElements似乎是相关的。它们可能会变成一个不整形的NumPy数组(或uproot.models.TArray,它是NumPy数组的一个子类)。您可能需要将其reshape为正确的形式,并且可能在其他成员(可能是属于超类的成员)中找到适当的形状。

如果您找到了一种使用TMatrixT对象的好方法,并且希望它变得自动化,可能是在values方法中,那么可以将其添加为pull request,或者将其描述为feature request for Uproot (一种新的“行为”)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65833805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档