예제 #1
0
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)
예제 #2
0
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)