def main(): # 生成模拟数据 db_size = 64 dim = 3 leaf_size = 4 k = 8 db_np = np.random.rand(db_size, dim) root = kdtree_construction(db_np, leaf_size=leaf_size) # 测试Kd-Tree遍历 depth = [0] max_depth = [0] traverse_kdtree(root, depth, max_depth) print("Tree max depth: %d" % max_depth[0]) # 测试KNN search query = np.asarray([0, 0, 0]) result_set = KNNResultSet(capacity=k) kdtree_knn_search(root, db_np, result_set, query) print(result_set) # 测试brute-force法 diff = np.linalg.norm(np.expand_dims(query, 0) - db_np, axis=1) nn_idx = np.argsort(diff) nn_dist = diff[nn_idx] print(nn_idx[0:k]) print(nn_dist[0:k]) # 测试Radius search result_set = RadiusNNResultSet(radius=0.5) kdtree_radius_search(root, db_np, result_set, query) print(result_set)
def test_search(): # Data generation db_size = 100 k = 5 #搜寻5个点 radius = 2.0 query_key = 6 # 查找点 data = np.random.permutation(db_size).tolist() #random.permutation 随机排列一个数组 root =None for i,point in enumerate(data): #返回序号和数据 root = insert(root,point,i) # result_set = KNNResultSet(capacity=k) # knn_search(root, result_set, query_key) # print('kNN Search:') # print('index - distance') # print(result_set) result_set = RadiusNNResultSet(radius=radius) radius_search(root, result_set, query_key) print('Radius NN Search:') print('index - distance') print(result_set)