Предположим, что 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
mat
1KDTreeEigenMatrixAdaptor.html, к сожалению, слишком далеко от базовая библиотека libflann для использования.