C++
Eigen

std::vectorからEigen::Matrixへ

やりたいこと

1次元のstd::vectorを、2次元のEigen::Matrixに変換する。

コード

hoge.cpp
# include <iostream>
# include <vector>
# include <Eigen/Dense>

using namespace Eigen;

int main() {
  Matrix<double, 5, 5> A;
  std::vector<double> mat(5*5);

  for (int i=0; i<5; i++) {
    for (int j=0; j<5; j++) {
      mat[5*i+j] = 5*i+j;
      A(i,j) = 5*i+j;
    }
  }
  Matrix<double, 5, 5, RowMajor> B = Map<Matrix<double, 5, 5, RowMajor> >(&mat[0], 5, 5);

  std::cout << A << std::endl;
  std::cout << "----------------" << std::endl;
  std::cout << B << std::endl;
}

結果

$ g++ -I /EIGEN_DIRECTORY_FULL_PATH/ hoge.cpp
$ ./a.out
 0  1  2  3  4
 5  6  7  8  9
10 11 12 13 14
15 16 17 18 19
20 21 22 23 24
----------------
 0  1  2  3  4
 5  6  7  8  9
10 11 12 13 14
15 16 17 18 19
20 21 22 23 24

ちょっと解説

  • Eigenではusing namespace Eigen;をするのが普通らしい
  • std::vectorを代入しているBという行列は、RowMajorにしないと、1列目から順に代入されていってしまう