C++ 代码创建空 HDF5 文件而不是数据集

Posted

技术标签:

【中文标题】C++ 代码创建空 HDF5 文件而不是数据集【英文标题】:C++ Code Creating Empty HDF5 File Instead of Dataset 【发布时间】:2020-09-12 17:33:49 【问题描述】:

我的班级中有以下代码来创建一个包含零矩阵的 HDF5 文件。但是,它会创建一个完全没有数据集的空 hdf5 文件。如何将数据集写入文件?

#include <H5Cpp.h>
#include <Eigen/Dense>

H5::H5File file("test_save.hdf5", H5F_ACC_TRUNC);
hsize_t dims[2] 10, 5;


std::cout << dims[0] << " " << dims[1] << std::endl;
std::cout << data_set_name << std::endl;
H5::DataSpace dataspace(2, dims);

auto dataset = file.createDataSet("test_dataset", H5::PredType::NATIVE_DOUBLE, dataspace);
Eigen::MatrixXd temp(10, 5);
temp.setZero();
dataset.write(temp.data(), H5::PredType::NATIVE_DOUBLE);

dataset.close();
file.close();

【问题讨论】:

【参考方案1】:

不确定 H5Cpp 库是如何做到的,但使用 HDFql 可以解决如下(请注意,由于您调用 temp.setZero();,写入的数据将为零):

#include <HDFql.hpp>
#include <Eigen/Dense>

HDFql::execute("CREATE TRUNCATE AND USE FILE test_save.hdf5");

HDFql::execute("CREATE DATASET test_dataset AS DOUBLE(10, 5)")

Eigen::MatrixXd temp(10, 5);
temp.setZero();

sprintf(script, "INSERT INTO test_dataset VALUES FROM MEMORY %d", HDFql::variableTransientRegister(temp.data()));

HDFql::execute(script);

【讨论】:

以上是关于C++ 代码创建空 HDF5 文件而不是数据集的主要内容,如果未能解决你的问题,请参考以下文章

将浮点数组写入和附加到 C++ 中 hdf5 文件中的唯一数据集

C++ HDF5 使用数据集的维度作为 const int

用于创建 HDF5 数据集的 4 维 c++ 数组的动态内存分配

HDF5 简单读取数据集失败

编写并将float数组附加到C ++中hdf5文件中的唯一数据集

如何从 C++ 中的 hdf5 文件中读取数据块?