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

Python:我可以在不将文件内容加载到RAM的情况下写入文件吗?,python,numpy,hdf5,h5py,Python,Numpy,Hdf5,H5py,有一个大数据集,我想洗牌。整个数据集无法放入RAM中,因此如果我可以同时打开多个文件(如hdf5、numpy),按时间顺序循环我的数据,并随机将每个数据点分配给其中一个数据堆,然后洗牌每个数据堆,这将是一件好事 我对用python处理数据缺乏经验,因此我不确定是否可以在不将其剩余内容保存在RAM中的情况下写入文件。我一直在使用np.save和savez,但收效甚微 这可能吗?在h5py或numpy中,如果可能,我该怎么做?Memmory映射文件将满足您的需要。他们创建一个numpy阵列,将数据保

有一个大数据集,我想洗牌。整个数据集无法放入RAM中,因此如果我可以同时打开多个文件(如hdf5、numpy),按时间顺序循环我的数据,并随机将每个数据点分配给其中一个数据堆,然后洗牌每个数据堆,这将是一件好事

我对用python处理数据缺乏经验,因此我不确定是否可以在不将其剩余内容保存在RAM中的情况下写入文件。我一直在使用np.save和savez,但收效甚微


这可能吗?在h5py或numpy中,如果可能,我该怎么做?

Memmory映射文件将满足您的需要。他们创建一个numpy阵列,将数据保留在磁盘上,只在需要时加载数据。完整的手册页是。但是,使用它们最简单的方法是在调用np.load时传递参数mmap_mode=r+或mmap_mode=w+,将文件留在磁盘上请参阅


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

@desertnaut洗牌庞大的数据集与机器学习无关?读/写行?标签与问题的内容有关,而不是其上下文;这样说吧,ML实际上与洗牌庞大的数据集无关。如果这种洗牌与(比如)适合你的模特有关,那么标签在这里是合适的——但这里不是这样。标签在某种程度上是用来吸引在这一领域有经验的人的。正如我所提到的,绝大多数对海量数据集的洗牌感兴趣的人都会像我一样,这样做是为了帮助提高模型的性能。因此,我加入了标签,因为在机器学习方面有经验的人可能会遇到这个问题并解决它。这显然不是一个可笑的标签,所以下次你想发表尖刻的评论时,请不要犹豫。你可以使用Dask数组来分块数据。谢谢,这真的很有帮助,我将研究mmap和高级索引!: