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

发布于 2024-10-24 05:28:43 字数 721 浏览 1 评论 0原文

背景

我有 ak 个 n 维时间序列,每个序列表示为包含浮点值的 mx (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 万个数据集。

谢谢!

Background

I have a k n-dimensional time-series, each represented as m x (n+1) array holding float values (n columns plus one that represents the date).

Example:

k (around 4 million) time-series that look like

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

Each day, I want to add for a subset of the data sets (< k) an additional row. All datasets are stored in groups in one hd5f file.

Question

What is the most time-efficient approach to append the rows to the data sets?

Input is a CSV file that looks like

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

whereby date is unique for the particular file and could be ignored. I have around 4 million data sets. The issue is that I have to look-up the key, get the complete numpy array, resize the array, add the row and store the array again. The total size of the hd5f file is around 100 GB. Any idea how to speed this up?
I think we can agree that using SQLite or something similar doesn't work - as soon as I have all the data, an average data set will have over 1 million elements times 4 million data sets.

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

巨坚强 2024-10-31 05:28:43

您看过 PyTables 吗?它是一个构建在 HDF5 库之上的分层数据库。

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

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

Have you looked at PyTables? It's a hierarchical database built on top of the HDF5 library.

It has several array types, but the "table" type sounds like it would work for your data format. It's basically an on-disk version of a NumPy record array, where each column can be a unique data type. Tables have an append method that can easily add additional rows.

As far as loading the data from CSV files, numpy.loadtxt is quite fast. It will load the file into memory as a NumPy record array.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文