Python: 我可以在不将文件内容加载到 RAM 的情况下写入文件吗?
Python: Can I write to a file without loading its contents in RAM?
有一个大数据集,我想洗牌。整个集合不适合 RAM,所以如果我可以同时打开多个文件(例如 hdf5、numpy),按时间顺序循环遍历我的数据并随机将每个数据点分配给其中一堆(然后将每个数据随机播放),那会很好桩)。
我真的没有处理 python 中的数据的经验,所以我不确定是否可以在不将其余内容保存在 RAM 的情况下写入文件(一直在使用 np.save和 savez 收效甚微)。
在 h5py 或 numpy 中这可能吗?如果可以,我该怎么做?
内存映射文件将满足您的需求。他们创建了一个 numpy 数组,将数据留在磁盘上,只在需要时加载数据。完整的手册页是 here. However, the easiest way to use them is by passing the argument mmap_mode=r+
or mmap_mode=w+
in the call to np.load
leaves the file on disk (see here).
我建议使用高级索引。如果您在一维数组 arr
中有数据,您可以使用列表对其进行索引。所以 arr[ [0,3,5]]
会给你 arr
的第 0、3、5 个元素。这将使选择随机版本变得更加容易。由于这将覆盖数据,因此您需要以只读方式打开磁盘上的文件,并创建副本(使用 mmap_mode=w+
)以将打乱的数据放入。
有一个大数据集,我想洗牌。整个集合不适合 RAM,所以如果我可以同时打开多个文件(例如 hdf5、numpy),按时间顺序循环遍历我的数据并随机将每个数据点分配给其中一堆(然后将每个数据随机播放),那会很好桩)。
我真的没有处理 python 中的数据的经验,所以我不确定是否可以在不将其余内容保存在 RAM 的情况下写入文件(一直在使用 np.save和 savez 收效甚微)。
在 h5py 或 numpy 中这可能吗?如果可以,我该怎么做?
内存映射文件将满足您的需求。他们创建了一个 numpy 数组,将数据留在磁盘上,只在需要时加载数据。完整的手册页是 here. However, the easiest way to use them is by passing the argument mmap_mode=r+
or mmap_mode=w+
in the call to np.load
leaves the file on disk (see here).
我建议使用高级索引。如果您在一维数组 arr
中有数据,您可以使用列表对其进行索引。所以 arr[ [0,3,5]]
会给你 arr
的第 0、3、5 个元素。这将使选择随机版本变得更加容易。由于这将覆盖数据,因此您需要以只读方式打开磁盘上的文件,并创建副本(使用 mmap_mode=w+
)以将打乱的数据放入。