【问题标题】:hdf5 and ndarray append / time-efficient approach for large data-sets用于大型数据集的 hdf5 和 ndarray 追加/省时方法
【发布时间】:2011-07-18 14:36:36
【问题描述】:

背景

我有一个 k n 维时间序列,每个都表示为 m x (n+1) 数组,其中包含浮点值(n 列加一表示日期)。

例子:

k(大约 400 万)个时间序列看起来像

20100101    0.12    0.34    0.45    ...
20100105    0.45    0.43    0.21    ...
...         ...     ...     ... 

每天,我都想为数据集的一个子集 (one hd5f 文件中。

问题

将行追加到数据集最省时的方法是什么?

输入是一个 CSV 文件,看起来像

key1, key2, key3, key4, date, value1, value2, ... 

其中日期对于特定文件是唯一的,可以忽略。我有大约 400 万个数据集。问题是我必须查找密钥,获取完整的 numpy 数组,调整数组大小,添加行并再次存储数组。 hd5f 文件的总大小约为 100 GB。知道如何加快速度吗? 我想我们可以同意,使用 SQLite 或类似的东西是行不通的——只要我拥有所有数据,平均数据集将有超过 100 万个元素乘以 400 万个数据集。

谢谢!

【问题讨论】:

  • 你在使用 h5py 吗?它适用于 NumPy 数组,您应该能够在不读取数组的其余部分的情况下附加所需的数据。

标签: python performance numpy hdf5


【解决方案1】:

你看过PyTables吗?它是建立在 HDF5 库之上的分层数据库。

它有几种数组类型,但“表”类型听起来适合您的数据格式。它基本上是 NumPy 记录数组的磁盘版本,其中每一列都可以是唯一的数据类型。表格有一个 append 方法,可以轻松添加额外的行。

就从 CSV 文件加载数据而言,numpy.loadtxt 相当快。它将文件作为 NumPy 记录数组加载到内存中。

【讨论】:

  • 我查看了 PyTables,但缩小尺寸是它不兼容 Py3(还)。此外,您在系统中添加了另一层并破坏了与 hdf5 的兼容性。除此之外,我编写了自己的索引引擎,效果很好——PyTables 不支持 BSD 版本中的索引。不过谢谢你的提示。
猜你喜欢
  • 2021-09-25
  • 2018-04-09
  • 1970-01-01
  • 2016-04-04
  • 2016-12-10
  • 2014-03-07
  • 2015-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多