以 SQLite 和 HDF5 格式从/导入到 numpy、scipy

Posted

技术标签:

【中文标题】以 SQLite 和 HDF5 格式从/导入到 numpy、scipy【英文标题】:exporting from/importing to numpy, scipy in SQLite and HDF5 formats 【发布时间】:2011-12-14 13:56:42 【问题描述】:

Python 与 SQLite(sqlite3、atpy)和 HDF5(h5py、pyTables)的接口似乎有很多选择——我想知道是否有人有将这些与 numpy 数组或数据表(结构化/记录数组)一起使用的经验,以及其中哪些与每种数据格式(SQLite 和 HDF5)的“科学”模块(numpy、scipy)最无缝集成。

【问题讨论】:

您是在询问将 numpy 数据保存到 SQLite 表吗? 【参考方案1】:

其中大部分取决于您的用例。

与传统的关系数据库相比,我在处理各种基于 HDF5 的方法方面有更多的经验,所以我不能对 Python 的 SQLite 库发表太多评论......

至少就 h5pypyTables 而言,它们都通过 numpy 数组提供了非常无缝的访问,但它们面向非常不同的用例。

如果您想要快速访问任意基于索引的 切片的n 维数据,那么使用h5py 会简单得多。如果您有更像表格的数据,并且想要查询它,那么pyTables 是一个更好的选择。

pyTables 相比,h5py 是围绕 HDF5 库的相对“普通”的包装器。如果您要定期从另一种语言访问您的 HDF 文件,这是一件非常好的事情(pyTables 添加了一些额外的元数据)。 h5py 可以做很多很多,但对于某些用例(例如 pyTables 做了什么),您将需要花更多时间进行调整。

pyTables 有一些非常不错的功能。但是,如果您的数据看起来不像表格,那么它可能不是最佳选择。

举一个更具体的例子,我经常处理相当大(数十 GB)的 3 维和 4 维数据数组。它们是浮点数、整数、uint8s 等的同质数组。我通常想访问整个数据集的一小部分。 h5py 使这个非常变得简单,并且在自动猜测合理的块大小方面做得相当好。从磁盘抓取任意块或切片比简单的内存映射文件快得多。 (强调任意......显然,如果你想抓取整个“X”切片,那么 C-ordered memmapped array 是不可能被击败的,因为“X”切片中的所有数据在磁盘上都是相邻的。) /p>

作为一个反例,我的妻子从各种传感器收集数据,这些传感器在几年内以分钟到秒的间隔进行采样。她需要对她的数据存储和运行任意查询(以及相对简单的计算)。 pyTables 使这个用例变得非常简单和快速,并且与传统的关系数据库相比仍有一些优势。 (特别是在磁盘使用率和将大量(基于索引)数据读入内存的速度方面)

【讨论】:

谢谢——这正是我在对比h5pypyTables 时所寻找的那种信息...但因此它不一定与NumPy 相得益彰,但与NumPy 数组中的实际数据。我会将SQLite 部分作为单独的问题发布。 @JoeKington:旁注:我不确定“C-ordered memmapped array is possible to beat”:用 memcpy() 复制数据可能比传输压缩数据和解压缩数据要慢到达处理器 (blosc.pytables.org/trac)。最终结果是处理压缩数组数据比处理未压缩数组数据更快。

以上是关于以 SQLite 和 HDF5 格式从/导入到 numpy、scipy的主要内容,如果未能解决你的问题,请参考以下文章

导出 SQLite 表的内容并导入到 phpmyAdmin 表中

在熊猫中将可变长度列表保存到 HDF5

android sqlite 的导入( import)问题

将经过训练的 HDF5 模型加载到 Rust 中以进行预测

hdf5 和 pickle 比原始 csv 文件占用更多空间

如何将手机中的csv文件的内容导入到SQLite数据库中