首页 > 解决方案 > JaggedArray 可以计算最内层并返回另一个 JaggeredArray 吗?

问题描述

so_jaggered = awkward.fromiter([[[0, 1, 2]], [[0, 1], [2, 3]], [[0, 1, 2], [3, 4]]])
so_jaggered.counts

当前版本 0.12.13 返回

array([1, 2, 2])

但是,我只想计算最里面的部分,可以通过以下代码实现:

count_so_jaggered = np.array([[len(x) for x in trks] for trks in so_jaggered])

和输出看起来:

array([list([3]), list([2, 2]), list([3, 2])], dtype=object)

但它至少有两个缺点:速度慢和 dtype=object。有计划支持这种功能吗?

标签: uprootawkward-array

解决方案


你可以这样做:

awkward.JaggedArray(so_jaggered.starts, so_jaggered.stops,
                    so_jaggered.content.counts)

返回

<JaggedArray [[3] [2 2] [3 2]] at 0x797274f58630>

此外,还有一个 reducer 方法(如sum, min, max)可以直接执行此操作:

so_jaggered.count()

返回

<JaggedArray [[3] [2 2] [3 2]] at 0x7b7fd8f53f60>

请注意,属性(返回最外面的条目数)是counts用“s”调用的,不需要括号,而 reducer 方法(返回最里面的条目数)是在count没有“s”的情况下调用的,需要括号。这是一个设计错误,Awkward 1.0将用具有axis参数的单个 reducer 替换两者(axis=0返回最外层,axis=-1返回最内层,其他值介于两者之间)。

None此外,如果您有任何缺失值( 、 fromMaskedArraysNaN浮点数),reducers 不会计算缺失值,这是countcounts. 这也应该成为一个可选参数,为用户提供更多控制权。您在笨拙的数组界面中发现了一个弱点。


推荐阅读