窗口化写在python中,例如到NetCDF

问题描述 投票:1回答:1

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

xarray输入/输出文档注意到xarray不支持增量写入,只有增量读取除了通过dask.array流式传输。 (另外修改数据集只会影响内存中的副本,而不会影响连接的文件。)dask文档建议在每次操作后保存整个数组可能是必要的吗?

python large-data netcdf
1个回答
0
投票

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

注意,这种方法还提供了逐步增长数组维度的机会(通过调用createDimension大小为None,使其成为变量的第一个维度,并沿着变量的维度迭代地分配增量更大的索引)。

虽然随机访问窗口(即子集)写入似乎需要较低级别的包,但更多系统子集写入(最终覆盖整个数组)可以使用xarray逐步完成(通过指定块大小参数来触发使用dask.array后端) ,并且假设您的算法被重构,以便主循环发生在dask / xarray存储到文件调用中。这意味着您无法明确控制生成和写入块的顺序。

© www.soinside.com 2019 - 2024. All rights reserved.