22#if GTSAM_ENABLE_BOOST_SERIALIZATION
27#include <Eigen/Sparse>
28#include <boost/serialization/array.hpp>
29#include <boost/serialization/nvp.hpp>
30#include <boost/serialization/split_free.hpp>
33namespace serialization {
51template <
class Archive,
typename Scalar_,
int Rows_,
int Cols_,
int Ops_,
52 int MaxRows_,
int MaxCols_>
55 const Eigen::Matrix<Scalar_, Rows_, Cols_, Ops_, MaxRows_, MaxCols_>& m,
56 const unsigned int ) {
57 const size_t rows = m.rows(), cols = m.cols();
58 ar << BOOST_SERIALIZATION_NVP(rows);
59 ar << BOOST_SERIALIZATION_NVP(cols);
60 ar << make_nvp(
"data", make_array(m.data(), m.size()));
63template <
class Archive,
typename Scalar_,
int Rows_,
int Cols_,
int Ops_,
64 int MaxRows_,
int MaxCols_>
66 Eigen::Matrix<Scalar_, Rows_, Cols_, Ops_, MaxRows_, MaxCols_>& m,
67 const unsigned int ) {
69 ar >> BOOST_SERIALIZATION_NVP(rows);
70 ar >> BOOST_SERIALIZATION_NVP(cols);
72 ar >> make_nvp(
"data", make_array(m.data(), m.size()));
76template <
class Archive,
typename Scalar_,
int Rows_,
int Cols_,
int Ops_,
77 int MaxRows_,
int MaxCols_>
80 Eigen::Matrix<Scalar_, Rows_, Cols_, Ops_, MaxRows_, MaxCols_>& m,
81 const unsigned int version) {
82 split_free(ar, m, version);
86template <
class Archive>
87void serialize(Archive& ar, gtsam::Matrix& m,
const unsigned int version) {
88 split_free(ar, m, version);
93template <
class Archive,
typename _Scalar,
int _Options,
typename _Index>
94void save(Archive& ar,
const Eigen::SparseVector<_Scalar, _Options, _Index>& m,
95 const unsigned int ) {
96 _Index size = m.size();
98 std::vector<std::pair<Eigen::Index, _Scalar>> data;
99 for (
typename Eigen::SparseVector<_Scalar, _Options, _Index>::InnerIterator
102 data.push_back({it.index(), it.value()});
104 ar << BOOST_SERIALIZATION_NVP(size);
105 ar << BOOST_SERIALIZATION_NVP(data);
108template <
class Archive,
typename _Scalar,
int _Options,
typename _Index>
109void load(Archive& ar, Eigen::SparseVector<_Scalar, _Options, _Index>& m,
110 const unsigned int ) {
112 ar >> BOOST_SERIALIZATION_NVP(size);
115 std::vector<std::pair<Eigen::Index, _Scalar>> data;
116 ar >> BOOST_SERIALIZATION_NVP(data);
118 for (
auto&& d : data) {
119 m.coeffRef(d.first) = d.second;
123template <
class Archive,
typename _Scalar,
int _Options,
typename _Index>
124void serialize(Archive& ar, Eigen::SparseVector<_Scalar, _Options, _Index>& m,
125 const unsigned int version) {
126 split_free(ar, m, version);
typedef and functions to augment Eigen's MatrixXd
void save(const Matrix &A, const string &s, const string &filename)
save a matrix to file, which can be loaded by matlab
Definition Matrix.cpp:154