2017-07-26 2 views
1

J'ai un grand fichier netcdf avec un champ float standard qui se compose de seulement 0.0 ou 1.0. Je voudrais le convertir en un type d'octet à partir de la ligne de commande pour économiser de l'espace et aussi le rendre plus facile à lire dans le tableau pour un type d'octet dans fortran.conversion de float en octet dans le fichier netcdf

J'ai essayé d'utiliser NCAP

ncap -s 'fire=byte(fire)' CAMS_2003-2017_frp_mask2_africa_zip.nc test.nc 

mais il semble juste à zéro tous les champs. J'utilisais la compression zip_6 netcdf4 sur le fichier source, je ne suis pas sûr si cela complique les choses?

MISE À JOUR: Je trouve que ncap2 fonctionne avec octet

ncap2 -s 'fire=byte(fire)' CAMS_2003-2017_frp_mask2_africa_zip.nc test.nc 

Mais je ne comprends pas pourquoi les deux diffèrent? Il peut s'agir d'un problème de mémoire, car ncap et ncap2 échouent tous deux avec l'allocation de mémoire lors de la tentative de conversion en "int" au lieu de "byte".

+0

Est-ce que vous obtenez tous les zéros si vous lancez à 'int' au lieu de' byte'? – jhamman

+0

Il est intéressant de noter que l'utilisation de int au lieu de byte entraîne une erreur de mémoire. Mais j'ai découvert que l'octet fonctionne avec ncap2 ... Je ne sais pas pourquoi le comportement est différent, peut-être que ncap court aussi des problèmes de mémoire avec byte? –

+0

ncap2! = Ncap. Utilisez toujours ncap2. ncap est obsolète. Impossible de reproduire l'erreur de mémoire que vous mentionnez avec le NCO actuel sur un ensemble de données global de ~ 1 degré. –

Répondre

1

j'ai trouvé deux façons de le faire:

cdo -b I8 copy in.nc out.nc 

ou

ncap2 -s 'fire=byte(fire)' in.nc out.nc