2017-05-21 2 views

Répondre

2

Dans netCDF3, chaque valeur nécessite la même quantité d'espace disque. Dans netCDF4, il est possible de réduire l'espace disque requis en utilisant la compression gzip. Le taux de compression réel dépend des données. S'il y a beaucoup de valeurs identiques (par exemple des données manquantes), vous pouvez obtenir de bons résultats. Voici un exemple en python:

import netCDF4 
import numpy as np 
import os 

# Define sample data with all elements masked out 
N = 1000 
data = np.ma.masked_all((N, N)) 

# Write data to netCDF file using different data formats 
for fmt in ('NETCDF3_CLASSIC', 'NETCDF4'): 
    fname = 'test.nc' 
    ds = netCDF4.Dataset(fname, format=fmt, mode='w') 
    xdim = ds.createDimension(dimname='x', size=N) 
    ydim = ds.createDimension(dimname='y', size=N) 
    var = ds.createVariable(
     varname='data', 
     dimensions=(ydim.name, xdim.name), 
     fill_value=-999, 
     datatype='f4', 
     complevel=9, # set gzip compression level 
     zlib=True # enable compression 
    ) 
    var[:] = data 
    ds.close() 

    # Determine file size 
    print fmt, os.stat(fname).st_size 

Voir la netCDF4-python documentation, l'article 9) "compression efficace des variables netCDF" pour plus de détails.

2

Juste pour ajouter à l'excellente réponse de Funkensieper, vous pouvez copier et compresser des fichiers à partir de la ligne de commande en utilisant cdo:

cdo -f nc4c -z zip_9 copy in.nc out.nc 

On peut compresser des fichiers simplement en utilisant gzip ou zip etc, mais l'inconvénient est que vous devez décompresser avant de lire. L'utilisation des capacités de compression netcdf4 évite cela.

Vous pouvez sélectionner votre niveau X de compression en utilisant -z zip_X. Si vos fichiers sont très volumineux, vous pouvez sacrifier un peu la taille du fichier en échange de temps d'accès plus courts (par exemple en utilisant zip_5 ou 6, au lieu de 9). Dans de nombreux cas avec des données hétérogènes, le gain de compression est faible par rapport au fichier non compressé.

2

ou de même avec NCO

NCK -7 -L 9 in.nc out.nc