From 97fa6032d2a81365e486d64b9512f1cb4ab95c2a Mon Sep 17 00:00:00 2001 From: hjiang Date: Thu, 14 Feb 2008 19:10:38 +0000 Subject: [PATCH] Huijings code for getting the centroids and nearest neighbors --- .../huijing/centroids/.get_nodes.cc.swp | Bin 0 -> 12288 bytes fastlib2/contrib/huijing/centroids/build.py | 3 + .../contrib/huijing/centroids/get_nodes.cc | 58 + .../huijing/centroids/test_data_3_1000.csv | 1000 +++++++++++++++++ 4 files changed, 1061 insertions(+) create mode 100644 fastlib2/contrib/huijing/centroids/.get_nodes.cc.swp create mode 100644 fastlib2/contrib/huijing/centroids/build.py create mode 100644 fastlib2/contrib/huijing/centroids/get_nodes.cc create mode 100755 fastlib2/contrib/huijing/centroids/test_data_3_1000.csv 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 0000000000000000000000000000000000000000..e5c788f2031ae637e6460a000fdde55e23a05416 GIT binary patch literal 12288 zcmeI2&u<$=6vwArz)*fDAaOuQudW(7>2@7bfshkhq!FzmIgx<02ST)3@6Oueu6MV) zvu#2}`E}v|h$}+kK!pSc5K@J>!iB#9Zom;P`~e8QZ+D&8X@a1)RF0;d zxKTQ625zQ9)mvFOfd==1&jhl0i%FXz$jo8FbWt2?q&saa!mY<1nvVZaI6Av<}nHw z1&jhl0i%FXz$jo8FbWt2i~>dhqkvK19#O#cg?Q%yA#T)=5dQzqe*^gKQ6atuUxTl} z2jG41GI$=$fIl7);#cqm_#E5>pMkeP4jeEG{(M-7AHX-@W1xTq{yHwiPv9od;1zHV z90xV<<3kt&uY#w*li&$(KluGYA$|s5g7?4{Hz$zC$U~Y)fr#4Yv#9AWj=9^5u@BY1m#^qT%wsksZpYuLoG0 zhNn-@(RG9{VXxR;jqUABz0P5hs!WSG&aZ5)bQ|^6I1hb_Voh-(qau#tE~l+`G{Glb zOO?hg&ngEM5OQj_H!gO&<+4dT;F*njbqzG~c`8z>Un{b{AoXgQT*D2+%TZ+WEzv8v zOm`ifN(5%nY?T=&Uj1mVMM@XiuB55E+f|ufz9c;zr=77_FuqN9)}9~M`RK=oH#hQR zRz$F+<`GtQx)h#g9jK6^Q=uZfunHC_i&B~8Ahiz`L4>?EIs^(T9%Ho|6j?yoTe&yw46LLJFO`yNmSK)H6A6omK$TG8nZ{GXkpTR zx&1irg|b7_p4sufO?5&#M^*%zqza?hP`;~O2W2S=Z_$B|p>zX>Pm4vYa*+g^v|8QR z^&6$N3Z?BinNEwHJLQ4*@4Ac2(L2+giC1pt ziW0Y4FL84#9PrDM5GPgSg}E + +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