如何获取HDF5文件的数据集信息
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获取HDF5文件的数据集信息相关的知识,希望对你有一定的参考价值。
我需要在C++
中以通用方式访问以H5格式存储的数据集。目前它是这样的:
H5File* file = new H5File( path_to_dataset.c_str(), H5F_ACC_RDONLY );
DataSet* h5_dataset_file = new DataSet (file->openDataSet( "Dataset_name" ));
CompType dataset_access( sizeof(dataset_struct));
//...
dataset_access.insertMember(attribute_name,cur_byte_addr,PredType::NATIVE_INT32);
这是有效的,如果我知道所有参数,目前我缺乏attribute_name
(例如“功能A”)。
有没有办法在H5文件中获取所有列名?或者我是否需要对其进行硬编码或至少使用用户输入?
编辑:
即对于此示例,我需要label_id,Feature1,Feature2,Feature3,但这些名称与每个数据集不同:
答案
C ++ HDF5库的文档在这里:HDF5 C++ API。这些为您提供了一个很好的类概述以及一些C ++示例。对于像dataset.iterate_attrs(...)
中使用的attr_operator_t这样的较低级别的东西,请参阅HDF5 C/FORTRAN API。
作为一个最小的工作示例,下面的内容应该可行。请注意,使用lambda而不是void attr_op(...)
函数可能更好。
#include <H5Cpp.h>
#include <iostream>
#include <string>
void attr_op(H5::H5Location &loc, const std::string attr_name,
void *operator_data) {
std::cout << attr_name << std::endl;
}
int main() {
// these are defined somewhere
std::string file_name, dataset_name;
H5::H5File file{file_name, H5F_ACC_RDONLY};
auto dataset = file.openDataSet(dataset_name);
dataset.iterateAttrs(attr_op);
}
从这里开始使用像here这样的API函数。
以上是关于如何获取HDF5文件的数据集信息的主要内容,如果未能解决你的问题,请参考以下文章