public void Knn_RandomTest()
        {
            Matrix <float> queryMatrix = DenseMatrix.CreateRandom(3, 100, new ContinuousUniform(-10, 10));
            DenseColumnMajorMatrixStorage <float> query = (DenseColumnMajorMatrixStorage <float>)queryMatrix.Storage;
            Matrix <float> points   = DenseMatrix.CreateRandom(3, 100, new ContinuousUniform(-10, 10));
            Vector <float> maxRadii = DenseVector.Create(100, i => float.PositiveInfinity);


            var search  = new KdTreeNearestNeighborSearch((DenseColumnMajorMatrixStorage <float>)points.Storage);
            var results = DenseColumnMajorMatrixStorage <int> .OfInit(1, 100, (i, j) => 0);

            var resultDistances = DenseColumnMajorMatrixStorage <float> .OfInit(1, 100, (i, j) => 0);

            search.knn(query, results, resultDistances, maxRadii, k: 1, epsilon: float.Epsilon, optionFlags: SearchOptionFlags.AllowSelfMatch);

            var bruteForceSearch = new BruteForceNearestNeighbor(points);
            var results2         = DenseColumnMajorMatrixStorage <int> .OfInit(1, 100, (i, j) => 0);

            var resultDistances2 = DenseColumnMajorMatrixStorage <float> .OfInit(1, 100, (i, j) => 0);

            search.knn(query, results2, resultDistances2, maxRadii, k: 1, epsilon: float.Epsilon, optionFlags: SearchOptionFlags.AllowSelfMatch);

            for (int i = 0; i < results.ColumnCount; i++)
            {
                for (int j = 0; j < results.RowCount; j++)
                {
                    Assert.AreEqual(results2.At(j, i), results.At(j, i));
                }
            }
        }
Example #2
0
            public KdTreeMatcher(DataPoints cloud, int knn, float epsilon, float maxDist)
            {
                this.knn     = knn;
                this.epsilon = epsilon;
                this.maxDist = maxDist;

                this.kdtree = new KdTreeNearestNeighborSearch(CreateCloudMatrix(cloud));
            }