c - 使用 nc_create 写入压缩文件

标签 c netcdf

我正在使用 UCAR 的 netcdf 库来创建 netCDF 文件。创建 netCDF 文件的命令在这里: https://www.unidata.ucar.edu/software/netcdf/docs/netcdf-c/nc_005fcreate.html

如果我使用标志 NC_NETCDF4 | nc_create中的NC_CLASSIC_MODEL,它会创建一个压缩的netCDF文件吗?

最佳答案

压缩是在变量中设置的,而不是使用 nc_def_var_deflate 函数在文件中设置的。我使用了 Unidata 网站上的示例(并删除了错误检查以使其在此处可读,我认错了)。您可以使用 deflate_level 参数来查看文件大小的差异。不要指望奇迹,我的经验是你的 yield 大多在 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;
}

关于c - 使用 nc_create 写入压缩文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33223778/

相关文章:

javascript - 为传单风图格式化json

c++ - C 方法是否可能无法包含在 C++ 项目中?

c - 如何将分配的内存分解为多个区域并分配给进程?

c - 如何让 XCode 在我的 C 代码中显示警告?

java - NetCDF 与 Java : how to get GeoGrid from GridDataset using variable name lookup

r - 从多变量 netCDF 文件创建光栅砖列表

python - 索引错误 : too many indices for array when plot winds netcdf

c - 深入了解错误 “initializer element is not constant”

c++ - Using C *.so library in c++ project(Ubuntu)Using C *.so library in c project(ubuntu)

python - 使用 Python,文件