Python NetCDF:从地理区域创建离散坐标变量



我希望创建一个netcdf4文件'abreat_nc',具有时间的尺寸和一个离散的字母数字区域代码,例如。" A0"," A1"," A2"," B0"等不适合常规网格(而不是纬度/经度)。

NETCDF气候和预测(CF)元数据公约PDF表明这可以在第4.5节中进行,但我找不到任何示例。

有办法做到这一点吗?

到目前为止,我已经尝试过:

import netCDF4 as nc
area_nc = nc.Dataset('area.nc', 'w')
area_nc.createDimension('time', None)
area_nc.createDimension('nhood', 6)
time = area_nc.createVariable('time', int, ('time'))
nhood = area_nc.createVariable('nhood', str, ('nhood'))
in_temp = area_nc.createVariable('in_temp', int, ('time', 'nhood'))
nhood[:] = ['A0', 'A1', 'A2', 'B0', 'B1', 'B2']

,但我得到了错误:

IndexError: data can only be assigned to VLEN variables using integer indices

实现此目的,我想使用此代码作为参考将数据添加到文件中,而不是整数切片,例如:

area_nc.variables['in_temp'][0, 'A0'] = 23

谢谢!

问题的第一部分,错误:错误表明Python认为您的维度是可变长度(VLEN)。解决方案在于更好地定义维度。解决方案正在更改您的两行:

nhood = area_nc.createVariable('nhood', str, ('nhood')) ->
nhood = area_nc.createVariable('nhood', '<U13', ('nhood'))
nhood[:] = ['A0', 'A1', 'A2', 'B0', 'B1', 'B2'] ->
nhood[:] = np.array(['A0', 'A1', 'A2', 'B0', 'B1', 'B2'])

不幸的是,您的最后一行还无法正常工作。我可以想到以下解决方法:

def int_area(area):
    import numpy as np
    return np.where(np.array(['A0', 'A1', 'A2', 'B0', 'B1', 'B2'])==area)[0][0]
area_nc.variables['in_temp'][0, int_area('A0')] = 23

最新更新