贡献者: addis
sudo apt install libhdf5-dev
常识:
DataSet
:文件中的一个数、矩阵、字符串等变量。
DataSet::write(内存地址, 元素类型, 内存矩阵DataSpace, 文件矩阵DataSpace)
:把内存中一个矩阵的一部分(用 DataSpace
表示)写入文件中一个矩阵的一部分
DataSpace
:内存中或文件中矩阵的 layout
DataSpace::selectHyperslab
选取一个子矩阵
hsize_t
用于表示矩阵尺寸的整型
write
命令写整个矩阵
H5::PredType::NATIVE_DOUBLE
(双精度),NATIVE_CHAR
有符号字符,NATIVE_UCHAR
无符号字符,NATIVE_INT
,NATIVE_UINT
,NATIVE_FLOAT
hdf5
支持文件夹的概念,也就是一个数据文件中可以有多层文件夹。所以存矩阵最通用的办法可能就是一个矩阵一个文件夹,数据全部存成一个一维矢量,然后用额外的 dataset 表示行数、列数等额外信息。
#include <iostream>
#include <vector>
#include <H5Cpp.h>
// Use the standard HDF5 namespaces
using namespace H5;
using namespace std;
int main() {
vector<double> data = {1., 2., 3., 4., 5., 6.};
// H5F_ACC_TRUNC: replace file if exist
H5File file("testfile.h5", H5F_ACC_TRUNC);
hsize_t dims[2] = {2, 3}; // array size (ROW major!)
DataSpace dataspace(2, dims);
// use Predfined Type (PredType), double
DataSet dataset = file.createDataSet("myDoubleArray",
PredType::NATIVE_DOUBLE, dataspace);
dataset.write(data.data(), PredType::NATIVE_DOUBLE);
// will be auto called in destructors
dataset.close(); dataspace.close(); file.close();
}
dpkg -L libhdf5-dev
来查看所有头文件和 lib 文件的安装路径。
g++ test_hdf5.cpp -o test_hdf5.x -I/usr/include/hdf5/serial/ -L/usr/lib/x86_64-linux-gnu/hdf5/serial/ -lhdf5_cpp -lhdf5
test_hdf5.x
dataset
时添加一个 DSetCreatPropList
(property list):
DSetCreatPropList plist;
plist.setDeflate(6); // compression level from 0 to 9
DataSet dataset = file.createDataSet("myDoubleArray",
PredType::NATIVE_DOUBLE, dataspace, plist);