使用记录数组的对象数组

日期2008-05-17(最后修改),2008-05-17(创建)

numpy 支持使用 Python 对象数组,但这些数组缺乏普通 numpy 数组的类型一致性,因此在空间和时间方面效率可能很低,而且使用起来可能很麻烦。但是,能够在数组中存储用户定义的类通常很有用。

一种方法是利用 numpy 的记录数组。这些数组中的每个元素都可以很大,因为它具有命名和类型化的字段;本质上,它们是 numpy 等效于 C 结构数组。因此,如果一个人有一个包含一些数据(命名字段,每个字段都是 numpy 类型)和一些方法的类,那么可以将这些对象的数组数据表示为记录数组。获取方法更棘手。

一种方法是创建一个自定义的 NumPy 数组子类,它处理与您的对象类型之间的转换。这个想法是将每个实例的数据内部存储在一个记录数组中,但是当索引返回一个标量时,从记录中的数据构造一个新的实例。类似地,当分配给特定元素时,数组子类会将实例转换为其作为记录的表示形式。

附件中包含了上述方案的实现。

章节作者:AMArchibald

附件