以 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 库发表太多评论......
至少就 h5py
和 pyTables
而言,它们都通过 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
使这个用例变得非常简单和快速,并且与传统的关系数据库相比仍有一些优势。 (特别是在磁盘使用率和将大量(基于索引)数据读入内存的速度方面)
【讨论】:
谢谢——这正是我在对比h5py
和pyTables
时所寻找的那种信息...但因此它不一定与NumPy 相得益彰,但与NumPy 数组中的实际数据。我会将SQLite
部分作为单独的问题发布。
@JoeKington:旁注:我不确定“C-ordered memmapped array is possible to beat”:用 memcpy() 复制数据可能比传输压缩数据和解压缩数据要慢到达处理器 (blosc.pytables.org/trac)。最终结果是处理压缩数组数据比处理未压缩数组数据更快。以上是关于以 SQLite 和 HDF5 格式从/导入到 numpy、scipy的主要内容,如果未能解决你的问题,请参考以下文章
导出 SQLite 表的内容并导入到 phpmyAdmin 表中