python - 大型数据集的 hdf5 和 ndarray 追加/高效方法

标签 python performance numpy hdf5

背景

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

示例:

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

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

每天,我都想为数据集的一个子集 (< k) 添加一行。所有数据集都存储在一个 hd5f 文件中。

问题

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

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

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

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

谢谢!

最佳答案

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

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

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

关于python - 大型数据集的 hdf5 和 ndarray 追加/高效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5359880/

相关文章:

python - 让 pylint 识别自定义模块加载器

python - Pandas:根据重复索引值加速 df.loc

asp.net - 为什么在 Web 应用程序中由 Reporting Services 2005 调用时,第二个 T-SQL 查询的运行速度比第一个快得多

javascript - 在某些事件上加载某些图像(而不是在页面加载时)

python - 使用 elementtree 处理后删除 XML header

python代码发出蜂鸣声

python - 微分数据点的多项式插值集

numpy - Numpy 是否具有内置的元素矩阵模幂实现

python - Pip 在全局而不是在虚拟环境中安装 --- 即使所有路径和 pip 都指向正确的位置

python - 标量的矩阵元素次方