以下のmat
はEigen::MatrixXd
であり、すでにいくつかのデータが含まれているとします。メモリの重複を避けるための試みで、私はEigen3によって割り当てられた生のメモリチャンクへのポインタからflann::Matrix<double>
オブジェクトをインスタンス化しようとした:Eigen :: MatrixXd to flann :: Matrix <double>変換
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);
}
}
私はEigen3行列にアダプタを作成するためにFLANNからベースMatrix_
タイプをサブクラス化するためのオプションを検討しました。しかし、問題は、Matrix_
が、そのインタラクションで[]
オペレータの実装に依存していることです。上記の単純な(しかし壊れた)ソリューションと同じメモリ問題が発生する可能性があります。
このような現象を説明できると思いますか?
- 行/列-大きな問題
- インナー、アウターストライド問題が
- メモリアライメントが
Eigen::Map
を非互換性私が探して甘いですが、ありません。これは、残念ながらあまりにも遠くベースlibflannライブラリから使用できるようにEigen::MatrixXd
- http://nanoflann-reference.mrpt.org/svn/structnanoflann_1_1KDTreeEigenMatrixAdaptor.htmlにそれらを基本型として
stl::vector<std::vector<double> >
を使用するために再書き込み私のコードに吸うとEigen::Map
でしょう。
私はnanoFLANNと同じ問題を抱えていましたが(どちらの方法でも動作しましたが、デフォルトのColumn-Majorは私のアプリケーションでは非常に不器用でした)、ありがとう! –