しゃけのブログ

某大学院で研究している人の備忘録

Eigen::Matrixのpybind11での使い方

Eigenではデフォルトで行列をFortranのようにCol Major方式で扱っている. この方式では,Row Major方式を採用しているpython numpy arrayとの連携で参照渡しをする際に問題が発生する.

そのため,C++で使うEigenのMatrixをRowMajorに変更する必要がある.

 template <typename T>
 using RMatrix = Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>;

これをC++プログラムの最初に書けばいい.


なお,Vectorを扱う際はそもそもRow MajorとCol Majorで違いがないため,通常の使い方で構わない.

http://eigen.tuxfamily.org/dox/TopicFunctionTakingEigenTypes.html#TopicUsingRefClass