存储大量插值数据

计算科学 Python 插值 数据存储
2021-12-21 16:57:28

概述和先前的研究

我正在寻找一种方法来存储(原则上是任意的)大型“3D 表”,以结合 python 进行插值/查找。

我考虑过

  • CSV 文件,但据我所知,我会遇到从 2GB 开始的文件大小问题
  • Pytables:据我了解,它接近于一个合适的数据库,这对我来说听起来有点矫枉过正
  • PostgreSQL:在本地运行时,我可能会遇到内存+过度杀伤的问题

SE上有很多关于类似问题的问题,但我没有发现特定于python和插值方面的问题。

设置

我感兴趣的数据是 ~ (10.000 x 10.000 x 100),粗略估计我的 CSV 大小约为 200GB。原则上,我可以拆分最后一个维度并创建 100 个不同的 (10.000 x 10.000) 表,然后每个表将占用大约 2GB。

问题

对于此类问题,什么是合理的数据结构和 python 包?我知道在气象学中存在一个具有相应文件类型的“3D-pandas”,但我不记得/找不到它。

无需太多努力的大块评估也可能很重要。我正在尝试将此查找表与 JAX 一起使用,因此,如果您碰巧知道那里有一个好的解决方案,那将是完美的。

速度可能是个问题,这取决于我加载表格的频率。总执行时间为 10 小时。

2个回答

既然你穿着制服xyz格,你很幸运,其他人以前也遇到过类似的问题。具体来说,我建议您查看 HDF5 以了解将此类数据存储为数组的低级方式。

但最后,您不仅要存储一个数组,还要对它做一些实际的事情:插值。为此,更高级的方法是使用 NetCDF 格式,它可以在后台使用 HDF5 来存储数据。NetCDF 库有办法做到这一点,还有更多。给出您拥有的数据大小时,您可能会发现有趣的功能之一是它 (i) 可以将大型数组解释为 3d 数据,(ii) 通过使用有关哪些数据位于何处的空间信息来压缩此数据xyz空间。

您可以在此处找到 NetCDF 的文档:https : //www.unidata.ucar.edu/software/netcdf/docs/index.html HDF5 和 NetCDF 也有 Python 接口。

使用反卷积神经网络。

有一些方法可以构建一个反卷积神经网络,它获取源图像,然后使用神经网络构建该图像的更高分辨率版本。这基本上与使用卷积神经网络将图像简化为低分辨率特征相反。根据您的数据的样子,可能对您的数据执行相同的操作 - 在这种情况下,您不再需要存储插值数据,因为您可以通过神经网络运行其中的一部分来生成它根据命令。