hdf5和ndarray为大型数据集附加/节省时间的方法

时间:2011-03-19 03:36:29

标签: python performance numpy hdf5

背景

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

示例:

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万个数据集。

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

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