boost matrix serialization

boost::numeric::ublas::matrixをserializeする方法。
serializationには、boostを事前にコンパイルしておく必要あり。

1 cd boost_install_dir
2 ./bootstrap.sh
3 ./bjam
boost_install_dir/stage/libにライブラリが作成される。
ld.so.conf.dにboost.confを作成。
#boost.conf
boost_install_dir/stage/lib

ldconfigの実行。

main.cpp

#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>
#include <boost/serialization/serialization.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
using namespace boost;
using namespace boost::numeric::ublas;
using namespace boost::archive;

#include <iostream>
#include <fstream>
using namespace std;

int main( void)
{
  {
    int N =5;
    int M =2;
    matrix<int> mat_write( N, M);
    for( size_t i =0; i <mat_write.size1(); ++i){
      for( size_t j =0; j <mat_write.size2(); ++j){
	mat_write( i, j) =i+(j+1);
      }
    }
    
    cout <<mat_write <<endl;

    ofstream file( "save.dat");
    text_oarchive oa( file);
    oa <<(const matrix<int>)mat_write;
    file.close();
  }

  {
    matrix<int> mat_read;
    ifstream file( "save.dat");
    text_iarchive ia( file);
    ia >>mat_read;
    file.close();
    
    cout <<mat_read <<endl;
  }

  return 0;
}

g++ main.cpp -I{boost_install_dir} -L{boost_install_dir/stage/lib} -lboost_serialization-xx-mt

xxにはgcc43などコンパイル環境に依存する。boost_install_dir/stage/libを見れば分かる。

Mac OS Xの場合は、export DYLD_LIBRARY_PATHを通しておくこと。