问题标签 [uproot]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
uproot - 将 ROOT 文件读取到数据帧:uproot 比 root_numpy 的 tree2array 慢
我正在尝试将我的平面 ROOT ntuples 转换为数据帧(通过数组)。目前,我正在使用 root_numpy 并希望使用 uproot 来避免任何 ROOT 依赖项。
我有一个名为 vars_to_save 的要保存的 20 个变量的字符串名称列表(来自树中的总共 104 个变量)。
在 root_numpy 我使用:
这大约需要 2 秒(对于 491176 个事件和字符串 vars_to_save 列表中的 20 个变量)
在根除我尝试过:
每次大约需要 45 秒(大约慢 20 倍)。在尝试 3 中,我注意到 tree.arrays() 步骤是最慢的步骤,大约需要 40 秒。
有没有办法根除以加快此操作?
uproot - 使用 uproot 使用 2D 数组解析结构
我需要读取包含存储在结构中的二维数组的根树,并希望为此使用 uproot。
例如:以下代码片段在结构中创建了一个包含 2D 数组和 2D 数组的树。Uproot 自己读取二维数组没有问题,但不知道如何在结构中解析它。
有没有办法告诉 uproot 如何解析这个结构?
uproot - 如何使用 np 数组作为锯齿数组的掩码(python - 尴尬)?
我有一个根文件,我想从中提取每个事件的某个候选人。另一方面,我有一个 numpy 数组,其中包含我要提取的候选人的索引。
假设我的根文件有以下分支:
branch = [[8.956237 9.643666] [5.823581] [3.77208 5.6549993] [5.91686] [13.819047 14.108783]]
我想要前 4 个事件的第一个候选者,最后一个事件的第二个,因此,我有以下 numpy 数组:
npMask = array([[0],[0],[0],[0],[1]])
当我将 应用于 时npMask
,branch
结果不是我所期望的:
branch[npMask]
[[[8.956237 9.643666]] [[8.956237 9.643666]] [[8.956237 9.643666]] [[8.956237 9.643666]] [[5.823581]]]
但是,如果我将numpy
数组转换为jagged
数组,它就可以正常工作:
awkMask = awk.fromiter(npMask)
branch[awkMask]
[[8.956237] [5.823581] [3.77208] [5.91686] [14.108783]]
这里的问题是铸造需要太多时间,我正在使用该iterate
方法和 10k entrysteps
,每次迭代需要大约 65% 的时间。
所以,我的问题是:有没有正确的方法使用 numpy 数组作为锯齿状数组的掩码?
笔记
我通过比较三个不同的分支并从这三个分支中选择具有最高值的候选人来创建我的 numpy 数组,例如
compare1 = [[0 -0.1] [0] [0.65 0.55] [0.5] [0.6 0.9]]
compare2 = [[0.99 -0.1] [0.9] [0.45 0.2] [0.5] [0.66 0.99]]
compare3 = [[0.91 0.3] [0.77] [0.5 -0.2] [0.5] [0.87 0.59]]
uproot - 与 root_numpy 相比,uproot 中 TTreeMethods.array 的性能较慢
我正在使用 root_numpy / uproot 来处理一个 ROOT 文件(包含大约 800 万个事件)。我知道 uproot 只有在大 Tbasket 大小的情况下才能快速,但是,我正在查看一个 TBasket 大小约为 50kB 的分支,并且要读取分支,uproot 需要 70 秒,而 root_numpy 只需要 45 秒,这令人费解,因为我希望完全相反。有没有人对这里出了什么问题以及我该如何解决有任何建议?
这是我的根目录代码:
这是我的 root_numpy 代码:
python - uproot.pandas.iterate 中 3x3 数组的展平
我正在尝试修改我现有的脚本之一,该脚本使用 uproot 将根文件中的数据读取到使用uproot.pandas.iterate
. 目前它只读取包含简单数据类型(浮点数、整数、布尔值)的分支,但我想添加读取一些存储 3x3 矩阵的分支的能力。我从阅读自述文件中了解到,在这种情况下,建议通过将结构flatten=True
作为参数传递给 iterate 函数来展平结构。但是,当我这样做时,它会崩溃:
我的代码如下:
我已经能够使用它flatten=False
(在打印数据框时,它会将值分解为类似于此处显示的列:https ://github.com/scikit-hep/uproot#multiple-values-per-事件固定大小数组)。
但我从自述文件中了解到,不推荐不扁平化这些结构,至少出于速度目的 - 因为我有 O(10^8) 行要通过,所以速度有点令人担忧。我对造成这种情况的原因很感兴趣,因此我可以找到处理这些对象的最佳方法(并最终将它们写到一个新文件中)。谢谢!
编辑:我已将问题缩小到branches
选项。如果我手动指定一些分支(例如branches=['eventNumber, D0_SubVtx_234_COV_']
),那么它与 和 都可以正常flatten=True
工作False
。但是当使用 this 时list(branchdict.keys())
,它会给出原始问题顶部显示的 ValueError 。
我检查了这个列表,其中的所有元素都是真实的分支名称(否则它会给出 KeyError) - 它包含 206 个常规分支,其中一些包含标准数据类型,而其他包含长度为 1 的单个数据列表类型,外加 10 个包含类似 3x3 矩阵的分支。
如果我从这个列表中删除包含矩阵的分支,那么它会按预期工作。如果我只删除长度为 1 的列表,情况也是如此。每当我尝试读取包含这些长度为 1 列表和这些 3x3 矩阵的(单独的)分支时,就会发生崩溃。
python - 你如何使用来自 ROOT 的 TEntryList 和 UPROOT
我有两个根文件,现在正在使用 uproot 3.12。
tc
包含一些 TEntryList,它们为td
. 使用 uproot 我可以加载tc
并查看事件列表。可用的方法
我不知道如何使用这些,而且它似乎没有被记录在案......由于 uproot 使用 numpy,我希望以某种方式获得一个 bool 数组或索引数组作为剪切或迭代应用。
返回
和
返回
以下属性可用于 TEntryList,但似乎没有一个是可用于将事件列表应用于树的布尔值或索引数组。 _fN
返回合理数量的条目,_fFileName
指向正确的文件,_fTreeName
是正确的......
返回
uproot - uproot:从 jupyter notebook 上的 .root 文件加载和重新绘制 TH2 直方图的最佳方法
我对 python 和连根拔起非常陌生。以前,我一直在 C++ 环境中使用 ROOT。按照 uproot 教程,我可以从 .root 文件中读取我的 TH2D 图
我现在想通过 matplotlib 或 seaborn 重新创建和重新绘制现有图形,但我没有得到导入的 TH2 的结构。myTH2D._members()
正确输出:
myTH2D.edges
输出右轴,myTH2D.values
输出正确的计数(用粗略的 plt.imshow(myTH2D.values) 确认。当我打电话时问题就开始了myTH2D.pandas()
并且创建的 ntuple 以myTH2D.numpy()
我不理解的方式嵌套:
您对如何处理这些 ntuple 有什么建议吗?
谢谢!
编辑:
使用以下语法,我几乎可以实现正确的情节。它与原版相比是翻转的:
尽管如此,我的问题仍然存在:我希望通过 pandas 处理数据,因此有标签:现在我不知道哪个是 x 轴,哪个是 y 轴。有任何想法吗?
uproot - uproot:使用 uproot 方法 .pandas() 处理 TH2D
我对 uproot 和 Python 很陌生,但希望能很快赶上。我想知道为什么该方法.pandas()
会从 TH2D 直方图创建如此奇怪的表:
输出:
最后, myhisto.pandas() 返回:
并myhisto.columns
返回:
我在哪里可以找到该方法的文档.pandas()
以了解它在做什么?有没有办法myhisto
用正确的列在 DataFrame 中重新组织?
uproot - uproot:允许在 TH2D 直方图之间进行操作
我正在尝试将我的数据分析工作流程从 C++ 转换为 python。我有一个非常基本的问题:我已经加载了两个 TH2D 对象,将它们解开,现在我想在它们之间执行一些操作(例如求和/加法、归一化差等):这是继续进行的最佳方式Python?我在哪里可以找到与根目录中的 TH2D 类(具有继承)相关的方法?
特别是,当索引和列是IntervallIndex
具有+inf
和-inf
作为.right
和/或.left
值的类型时,这些操作将如何工作?
现在我正在尝试将其处理uproot.rootio.TH2D
成 NumPy 和/或 pandas,但原始 TH2D 的结构丢失了。
谢谢 :)
uproot - Uproot:将分支添加到根文件中的现有 TTree
我正在尝试使用 uproot 将分支添加到 .root 文件中的现有 TTree 中。连根拔起可以做到这一点吗?