我创建了一个带有xarray的netCDF文件,用于将地形高度信息,表面类型信息等输入到数值天气预报模型中。我设法创建了一个文件,但是,该模型要求不同的变量是不同的数据类型。
我的数据集bolund_static如下所示:
shinyServer(function(input, output) {
observeEvent(input$action,{
py_run_file("C:/Users/mussa/Sample.py")
})
使用bolund_static.to_netcdf()保存此数组,它将所有变量保存为double数据类型。我通过创建一个创建的netcdf文件的ncdump获得此信息。
<xarray.Dataset>
Dimensions: (x: 800, y: 200)
Coordinates:
* y (y) float64 1.0 3.0 5.0 7.0 9.0 ... 393.0 395.0 397.0 399.0
* x (x) float64 1.0 3.0 5.0 ... 1.595e+03 1.597e+03 1.599e+03
Data variables:
zt (y, x) float64 1.0 1.0 1.0 1.0 1.0 ... 1.0 1.0 1.0 1.0 1.0
vegetation_type (y, x) float64 -127.0 -127.0 -127.0 ... -127.0 -127.0
water_type (y, x) float64 3.0 3.0 3.0 3.0 3.0 ... 3.0 3.0 3.0 3.0 3.0
soil_type (y, x) float64 -127.0 -127.0 -127.0 ... -127.0 -127.0
pavement_type (y, x) float64 -127.0 -127.0 -127.0 ... -127.0 -127.0
Attributes:
version: 1
origin_z: 0.0
origin_y: 694682.098
origin_x: 6177441.825
origin_lat: 12.098271
origin_lon: 55.70364
rotation_angle: 0.0
palm_version: 6.0
origin_time: 2019-04-01 12:00:00 +01
导出后,我需要植被类型,水类型,土壤类型和路面类型为NC_BYTE类型,而不是NC_DOUBLE类型,并且x,y,zt为NC_FLOAT。 我将如何更改这些数据类型?在xarray / Python环境中可以做到吗?
答案 0 :(得分:2)
保存数据集时,您可以使用将输入作为字典的encoding
参数。
bolund_static.to_netcdf(filename.nc, encoding={'var1':{'dtype':'int8'}, 'var2':{'dtype':'int8'}})
# replace var1, var2 with your desired variable names
# for NC_float save dtype as int32, for NC_Byte save as int8
您还可以修改变量的其他属性,例如_FillValue
等。另一个重要的注意事项是,默认情况下,xarray会自动从最接近的起始时间保存时间单位。如果您想更改它,也可以用相同的方式进行
bolund_static.to_netcdf(filename.nc, encoding={'var1':{'dtype':'int8'},\
'var2':{'dtype':'int8'}, 'origin_time':{'units':'seconds/hours since a 2000-01-01 00:00:00'}})