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

标签 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 驱动器(因此随机访问与顺序访问一样快)。

最佳答案

您可以创建一个区域引用数据集,其中每个元素都与约 2000 个标识符之一相关。

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

关于python - 在磁盘上存储一个大表,快速检索指定的子集到 np.ndarray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29430979/

相关文章:

Python - 查找字符串文本中的重复项数

python - 正则表达式不匹配

linux - 如何将扩展编译成sqlite?

python 3 : starred expression to unpack a list

python - 如何在不退出现有循环的情况下安排任务?

python - 如何在 Mac OSX 下安装 ijson python 包(find_library 问题?)

java - Android SQLite 如果列等于用户名则列出所有数据 [帮助编写原始查询]

android - 如何删除 ListView android xamarin 中的选定项目

python - 在Python2.7中实现Barrier

python - 使用 Jinja2 嵌套 For 循环迭代连接表中的数据