Сжатие задается в переменных, а не в файле, используя функцию nc_def_var_deflate
. Я использовал пример с сайта Unidata (и удалил проверки ошибок, чтобы сделать его доступным для чтения здесь, mea culpa). Что вы можете сделать, так это играть с параметром deflate_level
, чтобы увидеть разницу в размере файла. Не ожидайте чудес, мой опыт в том, что вы в основном получаете порядка 10-20 процентов.
#include <cstdlib>
#include <netcdf.h>
#define NDIMS 1
#define NX 102400
int main()
{
int ncid, x_dimid, varid;
double* data_out = new double[NX];
for (int x=0; x<NX; ++x)
data_out[x] = (double)(std::rand())/RAND_MAX;
nc_create("test.nc", NC_CLOBBER | NC_NETCDF4, &ncid);
nc_def_dim(ncid, "x", NX, &x_dimid);
nc_def_var(ncid, "data", NC_DOUBLE, NDIMS, &x_dimid, &varid);
int shuffle = 1;
int deflate = 1; // This switches compression on (1) or off (0).
int deflate_level = 8; // This is the compression level in range 1 (less) - 9 (more).
nc_def_var_deflate(ncid, varid, shuffle, deflate, deflate_level);
nc_enddef(ncid);
nc_put_var_double(ncid, varid, data_out);
nc_close(ncid);
delete[] data_out;
return 0;
}
Что он выводит? Слово «сжать» не отображается в вашей ссылке, и значения, задокументированные для аргумента 'int cmode', также не указывают на это. –
Сжатие NetCDF4 задается на переменном уровне. Прочтите https://www.unidata.ucar.edu/software/netcdf/docs/netcdf-c/nc_005fdef_005fvar_005fdeflate.html#nc_005fdef_005fvar_005fdeflate – Chiel