用python进行窗口式写入,例如到NetCDF

时间:2019-04-08 06:40:00

标签: python large-data netcdf

在python中,如何在不将整个数组保存在内存中的情况下将数组的子集写入磁盘?

xarray输入/输出文档指出,xarray不支持增量写入,仅支持增量读取,除非通过dask.array流式传输。 (而且修改数据集只会影响内存中的副本,而不会影响连接的文件。)dask文档建议每次操作后是否有必要保存整个阵列?

1 个答案:

答案 0 :(得分:0)

这可以使用netCDF4(低级NetCDF绑定的python库)完成。只需将其分配给数据集变量的一部分,然后可选地随后调用数据集.sync()方法,以确保在将这些更改刷新到文件之前没有延迟。

请注意,该方法还提供了逐步增大数组维的机会(通过调用大小为createDimension的{​​{1}},使其成为变量的第一维,并迭代地分配给更大的索引沿该变量的维度)。

尽管随机访问窗口(即子集)写操作似乎需要较低级别的程序包,但可以使用None递增地完成更系统的子集写操作(最终覆盖整个阵列)(通过指定块大小参数触发xarray后端的使用),并提供了重构算法的条件,以便主循环发生在dask / xarray存储到文件调用中。这意味着您将无法明确控制块的生成和写入顺序。