public IVector CalculateDistance(IVector vector, DistanceMetric distanceMetric) { if (_curr == null) { _curr = _centroid.Select(c => c.Current).ToArray(); } if (distanceMetric == DistanceMetric.Cosine) { return(vector.CosineDistance(_curr, ref _clusterNorm)); } else { return(vector.FindDistances(_curr, distanceMetric)); } }
/// <summary> /// Calculates the distance between two vectors /// </summary> /// <param name="distance"></param> /// <param name="vector1"></param> /// <param name="vector2"></param> public static float Calculate(this DistanceMetric distance, IVector vector1, IVector vector2) { switch (distance) { case DistanceMetric.Cosine: return(vector1.CosineDistance(vector2)); case DistanceMetric.Euclidean: return(vector1.EuclideanDistance(vector2)); case DistanceMetric.Manhattan: return(vector1.ManhattanDistance(vector2)); case DistanceMetric.SquaredEuclidean: return(vector1.SquaredEuclidean(vector2)); default: return(vector1.MeanSquaredDistance(vector2)); } }