cmake c++ hdf5,hdf读取

适用于存在组的情况 Eigen::VectorXd &vd为Eigen中的数据类型,需要另行配置

#include <Eigen/Dense>
#include "netcdfcpp.h"
#include "hdf5.h"
#include "H5Cpp.h"


int read(Eigen::VectorXd &vd, const char *file_path, const char *g_name, const char *d_name)
    {
        //获取文件
        H5::H5File file(file_path, H5F_ACC_RDONLY);
        //获取组
        H5::Group group = file.openGroup(g_name);
        //获取存储空间
        H5::DataSet dataset = group.openDataSet(d_name);
        H5::DataSpace fs = dataset.getSpace();

        //获取维度数
        int dimNums = fs.getSimpleExtentNdims();
        hsize_t * dims = new hsize_t[dimNums];
        //H5::DataSpace myspace(dimNums, dims);
        //读取每个维度的大小
        fs.getSimpleExtentDims(dims);
        //创建接收
        //遍历dims的数量
        int vds = 1;
        for (size_t i = 0; i < dimNums; i++)
        {
            vds = vds * dims[i];
        }
        vd.resize(vds);
        dataset.read(vd.data(), H5::PredType::NATIVE_DOUBLE);
        // cout << vd.size() << endl;
        // for (int i = 0; i < vd.size(); i++)
        // {
        //     cout << vd[i] << endl;
        // }

        delete[]dims;

        fs.close();
        group.close();
        file.close();

        return 0;
    }
posted @ 2022-09-14 15:33  xiaomaixiaomai  阅读(541)  评论(0)    收藏  举报