假设mat
的类型为Eigen::MatrixXd
并且已经包含一些数据。在试图避免重复记忆,我试图实例从指针flann::Matrix<double>
对象由Eigen3分配的原始内存块:Eigen :: MatrixXd to flann ::矩阵<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);
}
}
我调查从FLANN子类基Matrix_
类型来创建一个适配器Eigen3矩阵的选项。但问题是,Matrix_
依赖于在其接口中实现[]
运算符。这让我觉得我可能会遇到与上面显示的简单(但是破碎的)解决方案相同的内存问题。
您认为什么可以解释这种行为?
- 行/列重大问题
- 内,外步幅问题
- 内存对齐不兼容性
Eigen::Map
是甜的,但不是我要找的。它会吸重新写我的代码使用stl::vector<std::vector<double> >
作为基本类型和Eigen::Map
他们Eigen::MatrixXd
- http://nanoflann-reference.mrpt.org/svn/structnanoflann_1_1KDTreeEigenMatrixAdaptor.html可惜已经远离基地libflann库是可用的。
我与nanoFLANN有同样的问题(尽管它在两种方式下都有效,但默认Column-Major对于我的应用程序非常笨拙),谢谢! –