7 #include "Features.hpp"
27 DLL_DECLSPEC
BallTree(Eigen::Ref<const Eigen::MatrixXd> X,
unsigned int min_split_size);
36 DLL_DECLSPEC
BallTree(Eigen::Ref<const Eigen::MatrixXd> X, Eigen::Ref<const Eigen::VectorXd> y,
unsigned int min_split_size);
44 DLL_DECLSPEC
BallTree(Eigen::MatrixXd&& X,
unsigned int min_split_size);
53 DLL_DECLSPEC
BallTree(Eigen::MatrixXd&& X, Eigen::VectorXd&& y,
unsigned int min_split_size);
58 const Eigen::MatrixXd&
data()
const
66 const Eigen::VectorXd&
labels()
const
79 DLL_DECLSPEC
void find_k_nearest_neighbours(Eigen::Ref<const Eigen::VectorXd> x,
unsigned int k, std::vector<unsigned int>& nn)
const;
96 return static_cast<unsigned int>(data_.cols());
104 return static_cast<unsigned int>(data_.rows());
110 unsigned int pivot_index;
111 unsigned int start_index;
112 unsigned int end_index;
113 std::unique_ptr<Node> left_child;
114 std::unique_ptr<Node> right_child;
117 Eigen::MatrixXd data_;
118 Eigen::VectorXd labels_;
119 std::unique_ptr<Node> root_;
120 unsigned int min_split_size_;
130 void construct(Eigen::Ref<Eigen::MatrixXd> work, Eigen::Ref<Eigen::VectorXd>
labels,
unsigned int offset, std::unique_ptr<Node>& node, Features::VectorRange<Features::IndexedFeatureValue> features);
135 typedef std::pair<unsigned int, double> IndexedDistanceFromTarget;
140 struct IndexedDistanceFromTargetComparator
142 bool operator()(
const IndexedDistanceFromTarget& a,
const IndexedDistanceFromTarget& b)
const
144 return a.second < b.second;
151 typedef std::priority_queue<IndexedDistanceFromTarget, std::vector<IndexedDistanceFromTarget>, IndexedDistanceFromTargetComparator> MaxDistancePriorityQueue;
160 void knn_search(Eigen::Ref<const Eigen::VectorXd> x,
unsigned int k,
const Node* node, MaxDistancePriorityQueue& q)
const;
169 double distance_from_queue(Eigen::Ref<const Eigen::VectorXd> x,
unsigned int k,
const MaxDistancePriorityQueue& q)
const;