Example #1
0
    def test_nearest_neighbour_random(self):
        for seed in range(1, 10):
            random.seed(seed)
            points = [self.random_point(100) for _ in range(100)]
            point = self.random_point(100)
            closest = sorted(points, key=lambda x: distance(point, x))

            tree = KdTree(points)
            self.assertTupleEqual(
                tree.nearest_neighbour(point, 1)[0].point, closest[0])

            nearest = tree.nearest_neighbour(point, 10)
            for n, c in zip(nearest, closest):
                self.assertTupleEqual(n.point, c)
Example #2
0
    def test_nearest_neighbour_big(self):
        # creating tree - 36 s
        # finding nn - 0.3 ms
        # nth element - 1.37 ms
        # sort - 1.2 ms
        random.seed(42)
        points = [(random.randint(-100000,
                                  100000), random.randint(-100000, 100000),
                   random.randint(-100000, 100000)) for _ in range(25000)]
        point = (random.randint(-100000,
                                100000), random.randint(-100000, 100000),
                 random.randint(-100000, 100000))
        closest = (-10000000, -10000000, -10000000)
        for p in points:
            if distance(point, p) < distance(point, closest):
                closest = p

        start = timeit.default_timer()
        tree = KdTree(points)
        print('Creating tree', timeit.default_timer() - start)

        start = timeit.default_timer()
        nearest = tree.nearest_neighbour(point, 100)
        print('Searching NN', timeit.default_timer() - start)
        self.assertTupleEqual(nearest[0].point, closest)
Example #3
0
    def test_nearest_neighbour(self):
        tree = KdTree([(1, )])
        nearest = tree.nearest_neighbour((-3, ), 1)
        self.assertTupleEqual(nearest[0].point, (1, ))

        tree = KdTree([(1, 3), (2, 4)])
        nearest = tree.nearest_neighbour((0, 2), 1)
        self.assertTupleEqual(nearest[0].point, (1, 3))
        nearest = tree.nearest_neighbour((3, 5), 1)
        self.assertTupleEqual(nearest[0].point, (2, 4))

        tree = KdTree([(1, 3, 3), (4, 8, 7), (2, -1, 2), (3, 4, 1)])
        nearest = tree.nearest_neighbour((1, 2, 0), 1)
        self.assertTupleEqual(nearest[0].point, (3, 4, 1))

        tree = KdTree([(-1, 1), (0, -2), (1, -2)])
        nearest = tree.nearest_neighbour((1, 2), 1)
        self.assertTupleEqual(nearest[0].point, (-1, 1))