在python中,如何在不将整个数组保存在内存中的情况下将数组的子集写入磁盘?
xarray
输入/输出文档指出,xarray不支持增量写入,仅支持增量读取,除非通过dask.array
流式传输。 (而且修改数据集只会影响内存中的副本,而不会影响连接的文件。)dask
文档建议每次操作后是否有必要保存整个阵列?
答案 0 :(得分:0)
这可以使用netCDF4
(低级NetCDF绑定的python库)完成。只需将其分配给数据集变量的一部分,然后可选地随后调用数据集.sync()
方法,以确保在将这些更改刷新到文件之前没有延迟。
请注意,该方法还提供了逐步增大数组维的机会(通过调用大小为createDimension
的{{1}},使其成为变量的第一维,并迭代地分配给更大的索引沿该变量的维度)。
尽管随机访问窗口(即子集)写操作似乎需要较低级别的程序包,但可以使用None
递增地完成更系统的子集写操作(最终覆盖整个阵列)(通过指定块大小参数触发xarray
后端的使用),并提供了重构算法的条件,以便主循环发生在dask / xarray存储到文件调用中。这意味着您将无法明确控制块的生成和写入顺序。