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]]
解决方案
awkward.fromiter
是允许用 Python for 循环编写的一个函数,因此它被指定为慢。您想要将常规 NumPy 数组转换为恰好具有统一计数的 JaggedArrays 的函数是JaggedArray.fromregular
. 那应该会快很多。
同时,您的原始问题是 Awkward 0.x 中不一致的一个示例。在 Awkward 1.x 中,恰好是规则的 Awkward 数组和具有相同逻辑含义的 NumPy 数组的行为是相同的。您可能想考虑awkward1.from_awkward0
在awkward1
图书馆尝试一下。(这是一个单独的库,因为界面有点不同,我不想破坏任何人的分析!)
推荐阅读
- javascript - 如何使会话数据可用于 Node.js Express 中的所有模板
- git - Jenkins 管道复杂的 Git 结账
- android - 如何在 Android Gradle 中检查特定工件是否存在于 mavenLocal 存储库(即 .m2 存储库)中?
- excel - 如何获取字符串的特定索引
- vb.net - 为什么在 vb.net 中页面大小不会改变
- python - 使用 Selenium Python 处理甜蜜警报 2 通知
- android - Android 电信系统角色管理器
- windows - MongoDB for Windows 32 位 SSL
- createuser - 注册 Github 时,我可以跳过“验证您的帐户”部分吗
- python - 在python中定位两条轨迹的交点