Skip to content

garrison/eigen3-hdf5

Repository files navigation

eigen3-hdf5

Easy serialization of C++ Eigen matrices using HDF5.

The library is meant to be bare-bones (at least for now). It gets me 90% of what I want/need in a few hundred lines of code. It may also get you 90% (or even 100%) of what you need.

Requirements

  • Eigen3 (tested on 3.1 and 3.2 branches)
  • HDF5 C++ wrapper library >= 1.8.12 (yes, this is a very recent version)

Because eigen3-hdf5 is a template library, there is nothing to link against (besides the HDF5 libraries).

API

Supports saving and restoring Eigen matrices and vectors of float, double, long double, int, unsigned int, and std::complex<>.

#include <eigen3-hdf5.hpp>

void save_matrix()
{
    Eigen::Matrix3d mat;
    mat << 1, 2, 3, 4, 5, 6, 7, 8, 9;
    H5::H5File file("filename1.h5", H5F_ACC_TRUNC);
    EigenHDF5::save(file, "MatrixDataSetName", mat);
}

void load_vector()
{
    Eigen::Vector4i vec;
    H5::H5File file("filename2.h5", H5F_ACC_RDONLY);
    EigenHDF5::load(file, "VectorDataSetName", vec);
}

See the unittests directory for more examples.

Unit tests

I am using premake4 and googletest because I am familiar with them.

The unit tests currently write to specific files in the current directory. This could change, eventually.

The GitHub Action can be approximated locally by installing act and running:

act -P ubuntu-20.04=ghcr.io/catthehacker/ubuntu:act-20.04

License

MIT license.

Next steps

  • Support more fundamental data types

Thoughts/notes

  • Using the HDF5 C++ wrapper library supposedly means it won't work with parallel hdf5. If I were to do it again, I would write eigen3-hdf5 using the regular C HDF5 API, not the C++ wrapper. Patches are welcome. :)

About

Bare-bones hdf5 serialization of Eigen matrices and vectors

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Contributors 3

  •  
  •  
  •