使用大numpy矩阵保存/加载对象

时间:2014-08-05 12:11:39

标签: python numpy dataset mmap

我有一个数据集类,其中一些成员是可以变得非常大的矩阵;有时太大而无法保留在RAM中。因此,我将这些矩阵分配为numpy.memmaps。

我想将此对象保存到磁盘上的单个文件中。

由于我已经将磁盘上的矩阵分配为单独的memmap文件,因此该对象当前被保存为两个文件:存储没有矩阵的对象的.pkl,以及矩阵的单独memmap文件。我已经重载__getstate____setstate__以保存.pkl文件中memmap的路径。这很糟糕。

有没有办法将pickle对象及其巨型矩阵成员保存到单个文件中?

1 个答案:

答案 0 :(得分:0)

我没有使用memmaps的经验。所以,虽然我使用PyTables取得了很好的成功,但我真的无法比较这两者。使用PyTables,您可以获得内核和外核分配,灵活的数据压缩以及标准文件格式,这种格式更适合存储大于pickle的大型数值数据集。

PyTables创建结构化HDF5文件。因此,您可以获得其他分析系统的可移植性,包括Matlab以及为HDF5设计的各种文件查看器和数据检查工具。

这并不能回答您关于酸洗物品的原始问题,但考虑到您通过切换到PyTables而获得的灵活性,您可能需要更改磁盘数据格式。

如果你真的需要坚持使用Pickle,你可以通过创建并保存视图来打破你庞大的阵列,然后使用shelve保存较小的视图。