python - 如何在 Python 中持久存储并有效访问非常大的二维列表?

标签 python database storage

在 Python 中,我正在读取一个非常大的二维数据网格,该网格总共包含大约 200,000,000 个数据点。每个数据点都是 3 个 float 的元组。将所有这些数据读入二维列表经常会导致内存错误。为了解决此内存错误,我希望能够将此数据读入硬盘驱动器上的某种表中,在给定网格坐标(即 Harddrive_table.get(300, 42))时可以有效地访问该表。

到目前为止,在我的研究中,我遇到过 PyTables ,它是 HDF5 的实现,看起来有点矫枉过正,并且内置 shelve库,它使用类似字典的方法来访问保存的数据,但键必须是字符串,并且将数亿个网格坐标转换为字符串进行存储的性能可能对我的使用造成太大的性能影响。

是否有任何库允许我在硬盘驱动器上存储二维数据表,并有效访问单个数据点?

这个数据表只在程序运行时才需要,所以我不关心它的互操作性或它如何将数据存储在硬盘上,因为它会在程序运行后被删除。

最佳答案

  1. 如果 HDF5 有效的话,它也不算大材小用。除了 PyTables 之外,还有更简单的 h5py .

  2. Numpy 让您 mmap将文件直接放入 numpy 数组中。这些值将以最小开销的方式存储在磁盘文件中,numpy 数组形状提供数组索引和文件偏移之间的映射。 mmap 使用与磁盘缓存相同的底层操作系统机制来将磁盘文件映射到虚拟内存中,这意味着如果内存允许,则可以将整个文件加载到 RAM 中,但如果满足以下条件,则可以将部分内容刷新到磁盘(并稍后根据需要重新加载):它并不能同时全部适合。

关于python - 如何在 Python 中持久存储并有效访问非常大的二维列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63589215/

相关文章:

python - 字符串系列到数组

python - 在 Django Rest api 中,当互联网连接速度较慢时更新数据

php - 在一个php脚本中使用多个数据库

linux - 在EC2上运行大数据集,担心存储

c++ - 在 Windows Compact 2013 中标记存储卷

java - Android 5+ 文件已保存 "incorrect"

python - 环境变量中的 JUPYTER_PATH 不起作用

c++ - 如何从 C++ 返回 char ** 并使用 ctypes 将其填充到 Python 列表中?

mysql - 查询数据库中的地址并将其显示在谷歌地图上

mysql - 如何使用MySQL从max(datetime)中获取相应的值?