【发布时间】:2019-04-07 05:16:34
【问题描述】:
我能够将我的 recarray 数据复制到 ndarray,进行一些计算并返回带有更新值的 ndarray。
然后,我在 numpy.lib.recfunctions 中发现了 append_fields() 功能,并认为将 2 个字段简单地附加到我的原始记录数组以保存我的计算值会更聪明。
当我这样做时,我发现操作要慢得多。我不必计时,基于 ndarray 的过程需要几秒钟,而使用 recarray 需要一分钟以上,而且我的测试数组很小,
这是典型的吗? ndarray 访问比 recarray 快得多?我预计会由于按字段名称访问而导致性能下降,但不会这么严重。
【问题讨论】:
-
不清楚您正在比较哪些操作。
append_fields必须定义一个新数组,并逐个字段地从源中复制数据。正在处理什么大小的数组?形状?数据类型? -
正如 hpaulj 所说,append_fields 创建一个新数组并复制数据,因此它会相当慢。在大多数情况下,最好只返回计算值。
-
recarray/structured array在您想将一组混合值保存在一起时很方便 - 用于索引、排序、保存和从文件加载。大多数用户在加载csv文件时首先遇到它们。但是对于跨字段的计算,或者添加/删除字段,它们并没有什么特别之处。具有简单数字 dtype 的单独数组更快,并且内存效率更高。 -
感谢您的反馈。首先是一些背景知识:我使用 Pytables 从 HDF5 和 HDF5 中提取数据,只要表具有不同的类型,pytables 就会返回一个recarray。
-
我的数据在 5 个不同的 HDF5 数据集/表中(带有 2 个不同的 dytpes)。这是一个典型的 dtype 示例: dtype([('ID', '
标签: python numpy append field recarray