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