首页 > 解决方案 > 如何从尴尬.zip 创建的记录集合中删除字段?

问题描述

因此,已经使用创建了一个记录集合awkward.zip

import awkward
pineapple = awkward.from_iter([3, 4])
tofu = awkward.from_iter([5, 6])
pizza = awkward.zip({"pineapple": pineapple, "tofu": tofu})

我想从我正在使用的集合中删除其中一个记录/字段。我的第一个想法是做del pizza['pineapple'],但这不起作用。我可以;

pizza = awkward.zip({name: pizza[name] for name in awkward.fields(pizza)
                     if name != 'pineapple'})

但我想知道我是否可以做一些更有效的事情。我不是要删除对象pineapple,只是在pizza.

标签: awkward-array

解决方案


没有ak.Array.__del__,但这并不意味着不可能有。但是,它的实现方式与上面的实现方式大致相同——它将建立一个新记录,其中包含除要删除的字段之外的所有字段。将数组放在一起作为记录或从记录中点出数组的 Amy 操作在数组长度上是O(1):它们仅更改元数据,例如重塑 NumPy 数组。我们通常只担心随数组长度缩放的事物的性能,因为这是可能会变大的参数(假设您的数组条目比记录字段多得多)。

您也可以使用切片而不是ak.zio

pizza = pizza[[x for x in ak.fields(pizza) if x != "pineapple"]]

无论记录在列表的嵌套列表中有多深,这都会起作用。请参阅嵌套投影


推荐阅读