Przyjmuje, że poniżej przedstawiono mat
typu Eigen::MatrixXd
i zawiera już pewne dane. Próbując uniknąć pamięć powielanie, próbowałem instancji flann::Matrix<double>
obiekt ze wskaźnikiem do surowego kawałka pamięci przydzielonej przez Eigen3:Eigen :: MatrixXd na flann :: Matryca <double> konwersja
flann::Matrix<double> input(const_cast<double *>(mat.data(), mat.rows(), mat.cols())
Jednak mój algorytm wyprowadza śmieci, ale jest po prostu w porządku z brzydkim:
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);
}
}
I zbadano możliwość podklasy bazową Matrix_
typu z Flann utworzyć adapter macierzy Eigen3. Problem polega jednak na tym, że Matrix_
polega na implementacji operatora []
w swoim interwale. Czuję, że mogę napotkać ten sam problem z pamięcią, niż w prostym (ale zepsutym) rozwiązaniu pokazanym powyżej.
Co według Ciebie może wyjaśnić takie zachowanie?
- wiersz/kolumna poważnym problemem
- Wewnętrzna, zewnętrzna kwestia kroku
- wyrównanie pamięci Niezgodności
Eigen::Map
jest słodka, ale nie to, czego szukam. Ssałbym przepisać mój kod, by używaćstl::vector<std::vector<double> >
jako typów bazowych iEigen::Map
je doEigen::MatrixXd
- Niestety zbyt daleko od biblioteki podstawowej biblioteki libflann, aby można było z nich korzystać.
Miałem ten sam problem z nanoFLANN (chociaż działało to w obie strony, ale domyślna kolumna-majster była bardzo niezręczna dla mojej aplikacji), dziękuję! –