public void TestCosineDistance()
        {
            var distribution = new Normal(0, 5);
            var vectors = Enumerable.Range(0, 10).Select(i => _cpu.CreateVector(100, j => Convert.ToSingle(distribution.Sample())).AsIndexable()).ToList();
            var compareTo = Enumerable.Range(0, 20).Select(i => _cpu.CreateVector(100, j => Convert.ToSingle(distribution.Sample())).AsIndexable()).ToList();

            var distances = _cpu.CalculateDistances(vectors, compareTo, DistanceMetric.Cosine);

            var gpuVectors = vectors.Select(v => _cuda.CreateVector(v)).ToList();
            var gpuCompareTo = compareTo.Select(v => _cuda.CreateVector(v)).ToList();
            var gpuDistances = _cuda.CalculateDistances(gpuVectors, gpuCompareTo, DistanceMetric.Cosine);

            FloatingPointHelper.AssertEqual(distances.AsIndexable(), gpuDistances.AsIndexable());
        }
 /// <summary>
 /// Returns the index of the closest comparison vector for each vector
 /// </summary>
 public IReadOnlyList <int> GetClosest()
 {
     using (var distance = _lap.CalculateDistances(_data, _comparison, _distanceMetric)) {
         return(Enumerable.Range(0, _data.Count)
                .Select(i => _GetMinimum(distance, i).Index)
                .ToList());
     }
 }