【问题标题】:replacing a netcdf variable and rewrite to a new netcdf file替换 netcdf 变量并重写为新的 netcdf 文件
【发布时间】:2021-12-06 21:45:58
【问题描述】:

谁能帮我解决以下问题。 我有一个带有以下维度和变量的 netcdf 文件: 尺寸(大小):y(100),n2(2),x(100), 变量(维度):int64 valid_time(), int64 start_time(), float64 y(y), float64 y_bounds(y,n2), float64 x(x), float64 x_bounds(x,n2), int16 precipitation(y,x) , int8 proj()

netcdf 包含一个用于降水的二维数组 (100,100)。现在我有一个新的相同大小的二维数组(100,100),具有不同的值。我想知道如何用新的替换netcdf中的数组并将其重写为新的netcdf。我尝试了以下代码,但它无法替换数组(它可以重写并将 file.nc 重命名为 newfile.nc 而无需替换数组)

import xarray as xr
ds=xr.open_dataset('file.nc')
precip=ds.variables['precipitation']
precip=np.array(precip)
precip=new_array
ds.to_netcdf('newfile.nc')

【问题讨论】:

    标签: python numpy netcdf python-xarray


    【解决方案1】:

    首先提供您的 new_array 作为二维 numpy 数组,您可以这样做:

    import numpy as np
    new_array = np.array(new_array)
    

    那你可以试试:

    import xarray as xr
    ds=xr.open_dataset('file.nc')
    ds.variables['precipitation'].values = new_array
    ds.to_netcdf('newfile.nc)
    

    import xarray as xr
    ds=xr.open_dataset('file.nc')
    ds['precipitation'].values = new_array
    ds.to_netcdf('newfile.nc)
    

    但请注意 x 和 y 维度以及您的 new_array 映射到网格中心的方式应与您的 precipitation 一致。

    【讨论】:

    • 谢谢@Jeremy。是的,我试过了,但它给了我这个错误:TypeError Traceback (last recent call last) ~\AppData\Local\Temp/ipykernel_16556/2626514753.py in 1 ds=xr.open_dataset('file.nc' ) ----> 2 ds.variables['precipitation']=new_array 3 ds.to_netcdf('newfile.nc') TypeError: 'Frozen' object does not support item assignment
    • @Jab 我在使用我自己的 netcdf 文件进行测试后更新了我的答案。如果新数组是一个 numpy 二维数组,它应该可以工作。昨天我只是给出了一个直观的答案,因为我以前做过类似的事情,但是语法错误。
    • 非常感谢@Jeremy。现在它也适用于我。真正感谢您的时间和考虑。好时光!
    • 你好@Jeremy。您能否帮我解决有关上述问题的问题。我试图用 netcdf 中的数组替换两个相同大小的数组(一个用于降水,另一个用于时间)。对于沉淀,我可以替换并编写它,但对于时间而言,这是不可能的。这是时间数组的一部分;数组([[220190701000000, 220190701000000, 220190701000000, ..., 220190701000000, 220190701000000, 220190701000000],...]])。当我尝试编写 netcdf (ds.to_netcdf('newfile.nc)) 时,它会生成一个新数组(时间)的所有值都为零的 netcdf。
    • @Jab 嗨,我做了一个快速测试,在生成的 netcdf 文件中得到了类似“2.201907e+14”的值。我不知道是什么导致了您的问题,也许您可​​以尝试更改时间格式?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-19
    • 2015-05-11
    • 2018-10-10
    • 1970-01-01
    相关资源
    最近更新 更多