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()); } }