-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_ssg_index.cpp
60 lines (50 loc) · 1.88 KB
/
test_ssg_index.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include "index_random.h"
#include "index_ssg.h"
#include "util.h"
int main(int argc, char** argv) {
//base数据、knn-graph、L节点候选池大小、R近邻节点数、Angle SSG建图角度控制
if (argc < 7) {
std::cout << "./run data_file nn_graph_path L R Angle save_graph_file [seed]"
<< std::endl;
exit(-1);
}
if (argc == 8) {
unsigned seed = (unsigned)atoi(argv[7]);
srand(seed);
std::cout << "Using Seed " << seed << std::endl;
}
std::cerr << "Data Path: " << argv[1] << std::endl;
unsigned points_num, dim;
float* data_load = nullptr;
//读取数据和在内存对齐
data_load = efanna2e::load_data(argv[1], points_num, dim);
data_load = efanna2e::data_align(data_load, points_num, dim);
std::string nn_graph_path(argv[2]);
unsigned L = (unsigned)atoi(argv[3]);
unsigned R = (unsigned)atoi(argv[4]);
float A = (float)atof(argv[5]);
std::cout << "L = " << L << ", ";
std::cout << "R = " << R << ", ";
std::cout << "Angle = " << A << std::endl;
std::cout << "KNNG = " << nn_graph_path << std::endl;
//构建一个空的random_index对象和SSG_index对象
efanna2e::IndexRandom init_index(dim, points_num);
efanna2e::IndexSSG index(dim, points_num, efanna2e::L2,
(efanna2e::Index*)(&init_index));
efanna2e::Parameters paras;
paras.Set<unsigned>("L", L);
paras.Set<unsigned>("R", R);
paras.Set<float>("A", A);
paras.Set<unsigned>("n_try", 10);
paras.Set<std::string>("nn_graph_path", nn_graph_path);
std::cerr << "Output SSG Path: " << argv[6] << std::endl;
auto s = std::chrono::high_resolution_clock::now();
//建图
index.Build(points_num, data_load, paras);
auto e = std::chrono::high_resolution_clock::now();
std::chrono::duration<double> diff = e - s;
std::cout << "Build Time: " << diff.count() << "\n";
//保存final_graph
index.Save(argv[6]);
return 0;
}