Eigen事始め
やりたいこと
C++で行列計算を高速に行いたい!
ので、行列計算ライブラリEigenを学ぶ。
教科書
インストール
Eigen からダウンロードする。
もしくはROSが入っている場合、
/usr/include/eigen3/Eigen
にEigenがインストールされている。
コンパイル方法
g++ -I /path/to/eigen/ my_program.cpp -o my_program
Getting Started
#include <iostream> #include <Eigen/Dense> int main() { // 2行2列の行列作成 Eigen::Matrix2d m(2,2); m(0,0) = 3; m(1,0) = 2.5; m(0,1) = -1; m(1,1) = m(1,0) + m(0,1); std::cout << m << std::endl; // 1行2列のベクトル作成 Eigen::Vector2d v(1,2); std::cout << v << std::endl; // 上記行列とベクトルの積 std::cout << "m * v =" << std::endl << m * v << std::endl; }
出力
3 -1 2.5 1.5 1 2 m * v = 1 5.5
Dynamicに生成
以下のように記述することで行列サイズを動的に決めることができる
Eigen::MatrixXd m = MatrixXd::Random(3,3);
コンマで初期化
Matrix3f m; m << 1, 2, 3, 4, 5, 6, 7, 8, 9; std::cout << m;
便利機能まとめ
配列からEigenに変換
配列からEigenに変換するのに便利なEigen::Map
int array[8]; for(int i = 0; i < 8; ++i) array[i] = i; cout << "Column-major:\n" << Map<Matrix<int,2,4> >(array) << endl; cout << "Row-major:\n" << Map<Matrix<int,2,4,RowMajor> >(array) << endl;
出力
Column-major: 0 2 4 6 1 3 5 7 Row-major: 0 1 2 3 4 5 6 7
クオータニオン計算
参考なるブログ
所感
これは便利 ! 使いやすいし、多機能
背中がITAI...