python - 更改 netCDF 文件中的 chunk block 形状

标签 python matlab netcdf netcdf4

我有几个大约 100 GB 的 NetCDF 文件。 在每个 NetCDF 文件中,都有一个变量 a,我必须从中提取几个数据系列 尺寸为(1440,721,6,8760)。 我需要从每个 NetCDF 文件中提取大约 20k 维 (1,1,1,8760) 切片。 由于提取一片切片的速度非常慢(几分钟),因此我阅读了有关如何优化该过程的信息。 最有可能的是, block 没有被最佳设置。 因此,我的目标是将 block 大小更改为 (1,1,1,8760) 以获得更高效的 I/O。

但是,我很难理解如何最好地重新划分这个 NetCDF 变量。 首先,通过运行ncdump -k file.nc,我发现类型是64位偏移量。 根据我的研究,我认为这是 NetCDF3,它不支持定义 block 大小。 因此,我使用 nccopy -k 3 source.nc dest.nc 将其复制为 NetCDF4 格式。 ncdump -k file.nc 现在返回 netCDF-4。 然而,现在我被困住了。我不知道如何继续。

如果有人在 python、matlab 或使用 nccopy 中有正确的解决方案,请分享。 我现在正在尝试的是以下内容:

nccopy -k 3 -w -c latitude/1,longitude/1,level/1,time/8760 source.nc dest.nc

这在理论上是正确的方法吗? 不幸的是,24 小时后,它仍然没有在具有足够 RAM (250GB) 和许多 CPU (80) 的强大服务器上完成。

最佳答案

您的命令似乎是正确的。重新分块需要时间。

ncks -4 --cnk_dmn latitude,1 --cnk_dmn longitude,1 --cnk_dmn level,1 --cnk_dmn time,8760 in.nc out.nc

看看是否更快。

关于python - 更改 netCDF 文件中的 chunk block 形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72893340/

相关文章:

Python 2.7 混合迭代和读取方法会丢失数据

python - 如何使用 pylab 绘制钟摆运动的相平面?

python - 文件没有关闭

arrays - 什么时候在 Matlab 中使用元胞数组和结构体比较合适?

shell - 传递参数_Shell脚本-Octave脚本

python - 为什么 Django DecimalField 让我存储 float 或字符串?

MATLAB R2014b 切换回旧配色方案?

python - 在 python 中处理非常大的 netCDF 文件

python - 从 NETCDF 文件中提取数据的有效方法

python - 如何使用 Python 连接多个 netCDF 文件中的数据