假设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 库太远而无法使用。