uproot - 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。有计划支持这种功能吗?
解决方案
你可以这样做:
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
此外,如果您有任何缺失值( 、 fromMaskedArrays
或NaN
浮点数),reducers 不会计算缺失值,这是count
与counts
. 这也应该成为一个可选参数,为用户提供更多控制权。您在笨拙的数组界面中发现了一个弱点。
推荐阅读
- sql - 合并包含由 ColumnA 的下一个结果预测的 ColumnA 的行
- excel - 错误 - 运行时错误 13. 如何将行数加起来?
- sql - 如何从表中获取相关的源和目的地航班
- laravel - 如何禁用 Laravel 调度程序日志
- jmeter - 无法使用 Jmeter 上传 csv 文件
- c# - c# AsyncSockets 从客户端套接字读取时递归
- php - 如何修改此 Laravel AuthController 登录功能以检查活动列是否为 0?
- elasticsearch - 如何修复“无法导入索引模式”
- grafana - 以秒为单位绘制当前持续时间
- redis - Flower 代理选项卡不支持“带 SSL 的 Redis”代理