我需要在磁盘上存储一个表,并且能够将该表的子集检索到 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 驱动器(因此随机访问与顺序访问一样快)。
最佳答案
您可以创建一个区域引用数据集,其中每个元素都与约 2000 个标识符之一相关。
然后引用特定标识符的 Python 代码将如下所示:
reg_ref - reg_ref_dset[标识符]
mysub = data_dset[reg_ref]
关于python - 在磁盘上存储一个大表,快速检索指定的子集到 np.ndarray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29430979/