Python似乎有很多选择可以与SQLite(sqlite3,atpy)和HDF5(h5py,pyTables)交互-我想知道是否有人在将它们与numpy数组或数据表(结构化/记录数组)一起使用方面有经验,以及其中最无缝地与每种数据格式(SQLite和HDF5)的“科学”模块(numpy,scipy)集成在一起。
最佳答案
大多数情况取决于您的用例。
与传统的关系数据库相比,我在处理各种基于HDF5的方法方面有更多的经验,因此我不能对python的SQLite库进行过多评论。
至少就h5py
和pyTables
而言,它们都通过numpy数组提供了非常无缝的访问,但是它们针对的是非常不同的用例。
如果您要快速访问基于索引的任意切片的n维数据,则使用h5py
更加简单。如果您的数据更像表,并且要查询它,那么pyTables
是一个更好的选择。
与h5py
相比,pyTables
是围绕HDF5库的相对“原始”包装。如果您要定期从另一种语言访问HDF文件,这是一件好事(pyTables
添加了一些额外的元数据)。 h5py
可以做很多事情,但是对于某些用例(例如pyTables
的功能),您将需要花费更多的时间来进行调整。pyTables
具有一些非常好的功能。但是,如果您的数据看起来不太像表格,那么它可能不是最佳选择。
举一个更具体的例子,我处理了相当大的(数十GB)3维和4维数据数组。它们是float,int,uint8s等的均匀数组。我通常想访问整个数据集的一小部分。 h5py
非常简单,并且可以自动猜测合理的块大小。从磁盘上抓取任意块或切片的速度比简单的映射文件要快得多。 (强调任意。显然,如果要获取整个“X”片,则无法击败C顺序的内存阵列,因为“X”片中的所有数据在磁盘上都是相邻的。)
作为反例,我的妻子从各种各样的传感器中收集数据,这些传感器在过去几年中每隔一秒到一秒采样一次。她需要对数据进行存储和运行任意查询(和相对简单的计算)。 pyTables
使此用例变得非常容易和快速,并且与传统的关系数据库相比仍具有一些优势。 (特别是在磁盘使用率和大块(基于索引)数据可以读入内存的速度方面)
关于python - 以SQLite和HDF5格式从numpy,scipy导出/导入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7883646/