Python:是否可以在不将其内容加载到RAM的情况下写入文件?

时间:2019-07-09 14:51:30

标签: python numpy hdf5 h5py

有一个我想洗牌的大数据集。整套设备无法放入RAM,因此,如果我可以同时打开多个文件(例如hdf5,numpy),按时间顺序遍历我的数据并将每个数据点随机分配给其中一个堆,则会很好(然后将每个数据点随机播放)桩)。

我真的没有用python处理数据的经验,所以我不确定是否可以在不将其其余内容保存在RAM中的情况下写入文件(使用np.save和savez几乎没有成功)。 / p>

在h5py或numpy中是否可行?如果可以,我该怎么办?

1 个答案:

答案 0 :(得分:1)

内存映射文件将满足您的需求。他们创建了一个numpy数组,该数组将数据保留在磁盘上,仅根据需要加载数据。完整的手册页为here。但是,使用它们的最简单方法是在对mmap_mode=r+的调用中传递参数mmap_mode=w+np.load将文件保留在磁盘上(请参见here)。

我建议使用高级索引。如果数据位于一维数组arr中,则可以使用列表对其进行索引。因此arr[ [0,3,5]]将为您提供arr的第0,第3和第5个元素。这将使选择改组的版本更加容易。由于这将覆盖数据,因此您需要以只读方式打开磁盘上的文件,并创建副本(使用mmap_mode=w+)以将经过改组的数据放入其中。