mat
以下のタイプEigen::MatrixXd
で、すでにいくつかのデータが含まれていると仮定します。flann::Matrix<double>
メモリの重複を避けるために、Eigen3 によって割り当てられた生のメモリ チャンクへのポインタからオブジェクトをインスタンス化しようとしました。
flann::Matrix<double> input(const_cast<double *>(mat.data(), mat.rows(), mat.cols())
ただし、私のアルゴリズムはガベージを出力しますが、醜いものでも問題ありません。
flann::Matrix<double> input(new double[mat.rows()*mat.cols()], mat.rows(), mat.cols());
for (int i = 0; i < mat.rows(); i++) {
for (int j = 0; j < mat.cols(); j++) {
input[i][j] = mat(i, j);
}
}
Matrix_
基本型を flann からサブクラス化して、Eigen3 行列へのアダプターを作成するオプションを調査しました。ただし、問題は、インターフェイスでのオペレーターMatrix_
の実装に依存していることです。[]
上記の単純な (しかし壊れた) ソリューションと同じメモリの問題が発生する可能性があるように感じます。
そのような行動を説明できるものは何だと思いますか?
- 行/列優先の問題
- 内外歩の問題
- メモリ アラインメントの非互換性
Eigen::Map
甘いですが、私が探しているものではありません。コードを書き直してstl::vector<std::vector<double> >
基本型として使用Eigen::Map
するのは面倒です。Eigen::MatrixXd
- http://nanoflann-reference.mrpt.org/svn/structnanoflann_1_1KDTreeEigenMatrixAdaptor.html残念ながら、ベースの libflann ライブラリから遠すぎて使用できません。