2 votos

Cómo cambiar el dtype de una variable NetCDF y reescribirla como un nuevo archivo NetCDF

Me preguntaba cómo cambiar el dtype de precipitación de int16 a float64 en el siguiente archivo NetCDF con estas dimensiones y variables, y reescribirlo como nuevo archivo NetCDF;

<class 'netCDF4._netCDF4.Dataset'>
root group (NETCDF4 data model, file format HDF5):
    Conventions: CF-1.7
    dimensions(sizes): y(512), n2(2), x(512)
    variables(dimensions): int64 valid_time(), int64 start_time(), float64 y(y), float64 
y_bounds(y,n2), float64 x(x), float64 x_bounds(x,n2), float64 precipitation(y,x), int8 proj()
    groups:

Probé los siguientes códigos, pero no funcionaron;

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

En el script anterior no hay error pero el dtype no cambia.

También utilicé este script, pero no funcionó;

import netCDF4 as nc
ds=nc.Dataset('file.nc')
np.array(ds_time.variables['precipitation'])=ds.createVariable('precipitation','f8',  ('y','x'))

¿Podría alguien (@snowman2) ayudarme con este problema?

0voto

ojblass Puntos 431

Yo usaría ncap2 de los operadores NetCDF ( http://nco.sourceforge.net/nco.html#ncap2 )

ncap2 -s 'precipitation=double(precipitation)' file.nc newfile.nc

En tu código de ejemplo, estás convirtiendo la variable a float64, pero almacenándola de nuevo en una variable ya definida como int16, antes de copiar el conjunto de datos a un nuevo nombre.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X