diff --git a/fastlib2/contrib/huijing/centroids/.get_nodes.cc.swp b/fastlib2/contrib/huijing/centroids/.get_nodes.cc.swp new file mode 100644 index 0000000000..e5c788f203 Binary files /dev/null and b/fastlib2/contrib/huijing/centroids/.get_nodes.cc.swp differ diff --git a/fastlib2/contrib/huijing/centroids/build.py b/fastlib2/contrib/huijing/centroids/build.py new file mode 100644 index 0000000000..aba062159c --- /dev/null +++ b/fastlib2/contrib/huijing/centroids/build.py @@ -0,0 +1,3 @@ +binrule(name="cent", + sources=["get_nodes.cc"], + deplibs=["fastlib:fastlib", "mlpack/allknn:allknn"]) diff --git a/fastlib2/contrib/huijing/centroids/get_nodes.cc b/fastlib2/contrib/huijing/centroids/get_nodes.cc new file mode 100644 index 0000000000..621810fa21 --- /dev/null +++ b/fastlib2/contrib/huijing/centroids/get_nodes.cc @@ -0,0 +1,58 @@ +#include "fastlib/fastlib.h" +#include "mlpack/allknn/allknn.h" +#include + +typedef AllkNN::QueryTree Tree; + +void GetCenters(Tree *node, ArrayList *centers) { + if (!node->is_leaf()) { + GetCenters(node->left(), centers); + GetCenters(node->right(), centers); + } else { + node->bound().CalculateMidpoint(centers->AddBack()); + } +} + +int main(int argc, char *argv[]) { + FILE *fp; + fx_init(argc, argv); + std::string data_file = fx_param_str_req(NULL, "file"); + index_t leaf_size=fx_param_int(NULL, "lsize", 20); + index_t knns = fx_param_int(NULL, "knns", 5); + AllkNN allknn; + Matrix data_for_tree; + data::Load(data_file.c_str(), &data_for_tree); + allknn.Init(data_for_tree, data_for_tree, leaf_size, knns); + ArrayList resulting_neighbors_tree; + ArrayList distances_tree; + allknn.ComputeNeighbors(&resulting_neighbors_tree, + &distances_tree); + fp=fopen("neighbors.txt", "w"); + if (fp==NULL) { + FATAL("Could not open results.txt for writing\n"); + } + for(index_t i=0; i centers; + centers.Init(); + GetCenters(allknn.get_query_tree(), ¢ers); + fp=fopen("centroind.txt", "w"); + if (fp==NULL) { + FATAL("Could not open centroids.txt for writing\n"); + } + for(index_t i=0; i