【问题标题】:how to combine some NETCDF file in a single one如何将一些 NETCDF 文件合并为一个文件
【发布时间】:2021-05-29 00:49:33
【问题描述】:

我有 3 个非常大的 netcdf 文件,我想根据时间维度将它们全部合并到一个 .nc 文件中。我试图通过 xarray 组合它们,但这不是一个好方法,因为我的 PC 无法处理大量数据并且我收到此错误:MemoryError: Unable to allocate 17.9 GiB for an array with shape (73, 10000, 10000) 和数据类型 float32。 我想知道是否有另一种方法可以直接处理 netcdf 文件并在不使用 xarray 的情况下组合它们并且不会再次遇到内存问题? 这是我使用的代码:

path1 = '/final1_netcdf_VH.nc'
path2 = '/all/final2_netcdf_VH.nc'
path3 = '/final3_netcdf_VH.nc'

xarr1 = xarray.open_dataset(path1)
xarr2 = xarray.open_dataset(path2)
xarr3 = xarray.open_dataset(path3)

ultimate = xarray.merge([xarr1, xarr2, xarr3], compat="equals")

ultimate.to_netcdf('/ultimate_netcdf_VH.nc')

【问题讨论】:

    标签: netcdf


    【解决方案1】:

    您应该可以使用我的 nctoolkit 包 (https://nctoolkit.readthedocs.io/en/latest/) 来执行此操作。以下应该有效:

    import nctoolkit as nc
    path1 = '/final1_netcdf_VH.nc'
    path2 = '/all/final2_netcdf_VH.nc'
    path3 = '/final3_netcdf_VH.nc'
    
    ultimate = nc.open_data([path1, path2, path3])
    ultimate.merge_time()
    ultimate.to_nc('/ultimate_netcdf_VH.nc')
    

    这使用 CDO 作为后端。如果您对命令行感到满意并安装了 CDO,您只需要这样做:

    cdo -mergetime /final1_netcdf_VH.nc /all/final2_netcdf_VH.nc /final3_netcdf_VH.nc /ultimate_netcdf_VH.nc
    

    【讨论】:

    • 我尝试了第一个代码并且出现了这个错误: ValueError : cdo -L --sortname -mergetime F:/all/final1_netcdf_VH.nc F:/all/final2_netcdf_VH.nc F:/all/ final3_netcdf_VH.nc C:\Users\Admin\AppData\Local\Temp\tmpcw3deq3r.nc 没有成功。检查输出
    • 尝试第二个命令。我的猜测是这三个文件不完全兼容合并
    • 好吧,我有在这台电脑上安装 CDO 的问题,所以我应该使用 python 代码,我拥有的 3 个文件包含 X、Y、时间维度,它们具有相同的 X和 Y 但在不同的时间,所以我想将它们合并为一个连续的数据集 3 整年,具有相同的 X 和 Y 相同的 ROI。这是否意味着我应该使用这个:ultimate.merge_time()?
    • 正如我在回答中所说,nctoolkit 使用 CDO 作为后端。所以如果没有安装 CDO nctoolkit 将无法工作
    猜你喜欢
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-12
    相关资源
    最近更新 更多