首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >netcdf4-python:读取变量存储参数

netcdf4-python:读取变量存储参数
EN

Stack Overflow用户
提问于 2020-10-29 19:12:32
回答 2查看 147关注 0票数 1

我正在尝试手动将NetCDF文件的所有维度、变量和属性复制到新文件中。就像在copy netcdf file using python中一样,除了'fill_value‘或’chunksize‘这样的存储参数之外,它工作得很好。在ncdump -sch中,这些参数显示时带有前导下划线(_):

代码语言:javascript
复制
    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‘这样的参数呢?读取这些参数的语法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-30 09:54:55

有关块大小的信息,可以对变量使用chunking()方法。不幸的是,看起来您只能在_FillValue被设置为非默认值时才能访问它:

代码语言:javascript
复制
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)

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

代码语言:javascript
复制
fill = getattr(temp, '_FillValue', mydefaultvalue)

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

票数 1
EN

Stack Overflow用户

发布于 2020-10-30 21:33:29

谢谢你,这真是太棒了!我现在已经解决了对未定义的_FillValue的处理,如下所示:

代码语言:javascript
复制
try: fillVal = variable._FillValue
except: fillVal = netCDF4.default_fillvals[str(variable.dtype.kind)+str(variable.dtype.itemsize)]

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64589975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档