cpp-toolbox  0.0.1
A toolbox library for C++
Loading...
Searching...
No Matches
knn.hpp
Go to the documentation of this file.
1#pragma once
2
54
55namespace toolbox::pcl
56{
57
102template<typename T>
103inline auto create_default_knn(size_t num_points = 0) {
104 if (num_points > 10000) {
105 return std::make_unique<kdtree_t<T>>();
106 } else if (num_points > 1000) {
107 return std::make_unique<bfknn_parallel_t<T>>();
108 } else {
109 return std::make_unique<bfknn_t<T>>();
110 }
111}
112
136template<typename KNN>
137double benchmark_knn(KNN& knn,
138 const std::vector<typename KNN::element_type>& queries,
139 size_t k) {
140 using namespace std::chrono;
141
142 std::vector<std::size_t> indices;
143 std::vector<typename KNN::distance_type> distances;
144
145 auto start = high_resolution_clock::now();
146
147 for (const auto& query : queries) {
148 knn.kneighbors(query, k, indices, distances);
149 }
150
151 auto end = high_resolution_clock::now();
152 auto duration = duration_cast<microseconds>(end - start);
153
154 return static_cast<double>(duration.count()) / 1000.0 / queries.size();
155}
156
// end of knn group
158
159} // namespace toolbox::pcl
double benchmark_knn(KNN &knn, const std::vector< typename KNN::element_type > &queries, size_t k)
性能基准测试辅助函数 / Performance benchmark helper function
Definition knn.hpp:137
auto create_default_knn(size_t num_points=0)
KNN算法的选择指南 / Guide for choosing KNN algorithms.
Definition knn.hpp:103
Definition base_correspondence_generator.hpp:18