【问题标题】:netcdf4-python: Reading variable storage parametersnetcdf4-python:读取变量存储参数
【发布时间】:2020-10-30 21:33:29
【问题描述】:

我试图手动将 NetCDF 文件的所有维度、变量和属性复制到新文件中。与copy netcdf file using python 一样,这很好用,除了'fill_value' 或'chunksized' 之类的存储参数。在ncdump -sch 中,这些参数以前导下划线 (_) 显示:

    float var1(time, lat, lon) ;
        var1:_FillValue = NaNf ;
        var1:grid_mapping = "crs" ;
        var1:unit = "m" ;
        var1:_Storage = "chunked" ;
        var1:_ChunkSizes = 1, 14, 146 ;
        var1:_DeflateLevel = 9 ;
        var1:_Shuffle = "true" ;
        var1:_Endianness = "little" ;

createVariable 中,我可以为新变量设置这些参数,但是如何使用 netcdf4-python 模块从现有文件中获取“fill_value”或“chunksize”等参数?读取这些参数的语法是什么?

【问题讨论】:

    标签: python netcdf4


    【解决方案1】:

    有关块大小的信息,您可以对变量使用chunking() 方法。不幸的是,如果 _FillValue 设置为非默认值,您似乎只能访问它:

    from netCDF4 import Dataset
    import numpy as np
    
    nc = Dataset('data.nc', 'w')
    nc.createDimension('t', 10)
    var = nc.createVariable('temp', 'f', ('t',), fill_value=80)
    var[:] = np.arange(10)
    nc.close()
    
    nc_read = Dataset('data.nc')
    temp = nc_read.variables['temp']
    print(temp.chunking())
    print(temp._FillValue)
    

    所以现在看起来处理填充值的最简单方法是:

    fill = getattr(temp, '_FillValue', mydefaultvalue)
    

    可能值得在 GitHub 上游打开一个问题。

    【讨论】:

      【解决方案2】:

      谢谢你,这就像一个魅力! 我已经解决了一个未定义的_FillValue 的处理,现在就像:

      try: fillVal = variable._FillValue
      except: fillVal = netCDF4.default_fillvals[str(variable.dtype.kind)+str(variable.dtype.itemsize)]
      

      看起来有点复杂,但似乎dtype 没有default_fillvals 的预期输入的输出格式方法

      【讨论】:

        猜你喜欢
        • 2018-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-24
        相关资源
        最近更新 更多