flann_index_t __flann_build_index(typename Distance::ElementType* dataset, int rows, int cols, float* speedup, FLANNParameters* flann_params, Distance d = Distance()) { typedef typename Distance::ElementType ElementType; try { init_flann_parameters(flann_params); if (flann_params == NULL) { throw FLANNException("The flann_params argument must be non-null"); } IndexParams params = create_parameters(flann_params); Index<Distance>* index = new Index<Distance>(Matrix<ElementType>(dataset,rows,cols), params, d); index->buildIndex(); if (flann_params->algorithm==FLANN_INDEX_AUTOTUNED) { IndexParams params = index->getParameters(); update_flann_parameters(params,flann_params); SearchParams search_params = get_param<SearchParams>(params,"search_params"); *speedup = get_param<float>(params,"speedup"); flann_params->checks = search_params.checks; flann_params->eps = search_params.eps; flann_params->cb_index = get_param<float>(params,"cb_index",0.0); } return index; } catch (std::runtime_error& e) { Logger::error("Caught exception: %s\n",e.what()); return NULL; } }
int __flann_find_nearest_neighbors(typename Distance::ElementType* dataset, int rows, int cols, typename Distance::ElementType* testset, int tcount, int* result, typename Distance::ResultType* dists, int nn, FLANNParameters* flann_params, Distance d = Distance()) { typedef typename Distance::ElementType ElementType; typedef typename Distance::ResultType DistanceType; try { init_flann_parameters(flann_params); IndexParams params = create_parameters(flann_params); Index<Distance>* index = new Index<Distance>(Matrix<ElementType>(dataset,rows,cols), params, d); index->buildIndex(); Matrix<int> m_indices(result,tcount, nn); Matrix<DistanceType> m_dists(dists,tcount, nn); SearchParams search_params = create_search_params(flann_params); index->knnSearch(Matrix<ElementType>(testset, tcount, index->veclen()), m_indices, m_dists, nn, search_params ); delete index; return 0; } catch (std::runtime_error& e) { Logger::error("Caught exception: %s\n",e.what()); return -1; } return -1; }
flann_index_t __flann_build_index(typename Distance::ElementType* dataset, int rows, int cols, float* speedup, FLANNParameters* flann_params, Distance d = Distance()) { typedef typename Distance::ElementType ElementType; try { init_flann_parameters(flann_params); if (flann_params == NULL) { throw FLANNException("The flann_params argument must be non-null"); } IndexParams* params = IndexParams::createFromParameters(*flann_params); Index<Distance>* index = new Index<Distance>(Matrix<ElementType>(dataset,rows,cols), *params, d); index->buildIndex(); const IndexParams* index_params = index->getIndexParameters(); index_params->toParameters(*flann_params); if (index->getIndex()->getType()==FLANN_INDEX_AUTOTUNED) { AutotunedIndex<Distance>* autotuned_index = (AutotunedIndex<Distance>*)index->getIndex(); flann_params->checks = autotuned_index->getSearchParameters()->checks; *speedup = autotuned_index->getSpeedup(); } delete params; return index; } catch (std::runtime_error& e) { logger.error("Caught exception: %s\n",e.what()); return NULL; } }