我需要在磁盘上存储一个表,并且能够非常快速地将该表的一个子集检索到numpy.ndarray
。最好的方法是什么?在将数据集存储到磁盘之前,我不介意花时间预处理该数据集,因为一旦创建它就不会更改。
我不想编写任何C代码,而是依赖现有的python库。我正在考虑HDF5(使用pytables或h5py),sqlite,numpy的memmap或自定义二进制文件格式。
对于自定义文件,我将按标识符对行进行排序,并向文件添加一个目录,对于每个标识符,该目录将指定包含与此标识符相关的数据的开始和结束文件偏移量。就I / O而言,这可能会非常快,但代价是使用python而不是C代码(因为我认为没有一个库可以正确地执行此操作)。
详细说明:
~1亿行,〜{5列float
和str
数据。其中一列包含100,000个不同的标识符(因此每个标识符大约有1000行)。要检索的子集总是由一组标识符指定(通常我需要检索~2000个标识符,因此约占整个数据集的2%)。
Python 3.4,Linux,SSD驱动器(所以随机访问和顺序一样快。)
答案 0 :(得分:0)
您可以创建一个区域参考数据集,其中每个元素与~2000个标识符之一相关。
然后引用特定标识符的Python代码如下所示: reg_ref - reg_ref_dset [identifier] mysub = data_dset [reg_ref]