背景
我有一个 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/