我有一个数据集类,其中一些成员是可以变得非常大的矩阵;有时太大而无法保留在RAM中。因此,我将这些矩阵分配为numpy.memmaps。
我想将此对象保存到磁盘上的单个文件中。
由于我已经将磁盘上的矩阵分配为单独的memmap文件,因此该对象当前被保存为两个文件:存储没有矩阵的对象的.pkl,以及矩阵的单独memmap文件。我已经重载__getstate__
和__setstate__
以保存.pkl文件中memmap的路径。这很糟糕。
有没有办法将pickle对象及其巨型矩阵成员保存到单个文件中?
答案 0 :(得分:0)
我没有使用memmaps
的经验。所以,虽然我使用PyTables取得了很好的成功,但我真的无法比较这两者。使用PyTables
,您可以获得内核和外核分配,灵活的数据压缩以及标准文件格式,这种格式更适合存储大于pickle
的大型数值数据集。
PyTables
创建结构化HDF5文件。因此,您可以获得其他分析系统的可移植性,包括Matlab
以及为HDF5设计的各种文件查看器和数据检查工具。
这并不能回答您关于酸洗物品的原始问题,但考虑到您通过切换到PyTables
而获得的灵活性,您可能需要更改磁盘数据格式。
如果你真的需要坚持使用Pickle
,你可以通过创建并保存视图来打破你庞大的阵列,然后使用shelve
保存较小的视图。