在磁盘上存储一个大表,快速检索指定的子集到np.ndarray

时间:2015-04-03 11:04:44

标签: python sqlite python-3.x numpy hdf5

我需要在磁盘上存储一个表,并且能够非常快速地将该表的一个子集检索到numpy.ndarray。最好的方法是什么?在将数据集存储到磁盘之前,我不介意花时间预处理该数据集,因为一旦创建它就不会更改。

我不想编写任何C代码,而是依赖现有的python库。我正在考虑HDF5(使用pytables或h5py),sqlite,numpy的memmap或自定义二进制文件格式。

对于自定义文件,我将按标识符对行进行排序,并向文件添加一个目录,对于每个标识符,该目录将指定包含与此标识符相关的数据的开始和结束文件偏移量。就I / O而言,这可能会非常快,但代价是使用python而不是C代码(因为我认为没有一个库可以正确地执行此操作)。

详细说明:

~1亿行,〜{5列floatstr数据。其中一列包含100,000个不同的标识符(因此每个标识符大约有1000行)。要检索的子集总是由一组标识符指定(通常我需要检索~2000个标识符,因此约占整个数据集的2%)。

Python 3.4,Linux,SSD驱动器(所以随机访问和顺序一样快。)

1 个答案:

答案 0 :(得分:0)

您可以创建一个区域参考数据集,其中每个元素与~2000个标识符之一相关。

然后引用特定标识符的Python代码如下所示:   reg_ref - reg_ref_dset [identifier]   mysub = data_dset [reg_ref]