Numpy 读《连根拔起的三个朋友》

Numpy 读《连根拔起的三个朋友》,numpy,root-framework,uproot,Numpy,Root Framework,Uproot,是否有()与“根除”的等价物? 我在两个不同的文件中有两个平行的树,我需要使用uplot.iterate和使用解释(设置uplot.iterate的'branchs'选项)来读取它们 也许我可以通过手动从文件的iterate()调用中获取几个迭代器,然后在每个迭代器上调用next()来实现这一点。。。但也许有一种更简单的方法类似于AddFriend 谢谢你的提示 编辑:我不确定我是否清楚,所以这里有更多的细节。我的问题不是关于数组的使用,而是关于如何从不同的文件中读取它们。这是我正在做的一个模型

是否有()与“根除”的等价物? 我在两个不同的文件中有两个平行的树,我需要使用uplot.iterate和使用解释(设置uplot.iterate的'branchs'选项)来读取它们

也许我可以通过手动从文件的iterate()调用中获取几个迭代器,然后在每个迭代器上调用next()来实现这一点。。。但也许有一种更简单的方法类似于AddFriend

谢谢你的提示

编辑:我不确定我是否清楚,所以这里有更多的细节。我的问题不是关于数组的使用,而是关于如何从不同的文件中读取它们。这是我正在做的一个模型:

# I will fill this array and give it as input to my DNN
# it's very big so I will fill it in place

bigarray = ndarray( (2,numentries),...)

# get a handle on a tree, just to be able to build interpretations :
t0 = .. first tree in input_files
interpretations = dict(
    a=t0['a'].interpretation.toarray(bigarray[0]),
    b=t0['b'].interpretation.toarray(bigarray[1]),
    )
# iterate with :
uproot.iterate( input_files, treename,
                branches = interpretations )    

因此,如果
a
b
属于两个不同文件中的两棵树,该怎么办?

在基于数组的编程中,朋友是隐式的:您可以
在不必提前将他们声明为朋友后加入任何两列

在最简单的情况下,如果数组
a
b
具有相同的长度和顺序,则可以将它们一起使用,如
a+b
a
b
是否来自同一个文件并不重要。即使我知道这些是锯齿状的(比如
jets.phi
),而另一个不是锯齿状的(比如
met.phi
),你仍然可以,因为非锯齿状数组将被广播以匹配锯齿状数组

请注意,
笨拙的.Table
笨拙的.JaggedArray.zip
可以将数组组合成单个
表格
或锯齿状
表格
,以便记账

如果两个数组的顺序不相同,可能是因为每个writer都是单独并行的,那么您需要一些列作为键,将一个数组的行与另一个数组的不同行关联起来。这是一种经典的数据库样式
JOIN
,尽管“根除”和“笨拙”没有为其提供例程,但Pandas提供了。(在Pandas文档中查找“合并、连接和连接”,记录有很多!)您可以通过使用
笨拙的.topandas
函数准备列来保持Pandas中数组的锯齿状

下面的问题讨论了很多这些事情,尽管下面的问题中的用户必须加入文件集,而不仅仅是一棵树。(原则上,一个进程必须先查看所有文件,看看哪些文件包含哪些密钥:一个分布式数据库问题。)即使这不是您的情况,您可能会在那里找到更多提示,以了解如何开始


非常感谢你的回答,吉姆。我编辑了我的文章,因为我不确定我是否足够清楚。忘了说:我正在调查你指向的链接。但是我没有使用熊猫,所以还不确定它是否与我的情况相关。没有理由将它们混用在同一个解释中,或者尝试用一个命令来阅读它们。尝试从一个文件中读取
a
,独立于从另一个文件中读取
b
,然后合并数组以输入您的DNN。这样做的容易程度取决于它们是否以相同的顺序表示相同的事件。如果它们没有对齐,您将需要执行一个
连接,正如我在下面描述的那样。原因是方便,假设两个树中的事件确实对齐,这就是TTree::AddFriend的设计目的。无论如何,再次感谢你的回答!