public double Distance(IEnumerable <Vector> x, IEnumerable <Vector> y) { double distanceSum = 0; for (int i = 0; i < x.Count(); i++) { for (int j = i + 1; j < y.Count(); j++) { distanceSum += _distanceMetric.Compute(x.ElementAt(i), y.ElementAt(j)); } } return(distanceSum / (x.Count() * y.Count())); }
/// <summary>Distances.</summary> /// <param name="x">The IEnumerable<Vector> to process.</param> /// <param name="y">The IEnumerable<Vector> to process.</param> /// <returns>A double.</returns> public double Distance(IEnumerable <Vector> x, IEnumerable <Vector> y) { double distanceSum = 0; int xCount = x.Count(); int yCount = y.Count(); for (int i = 0; i < xCount; i++) { for (int j = i + 1; j < yCount; j++) { distanceSum += _metric.Compute(x.ElementAt(i), y.ElementAt(j)); } } return(distanceSum / (double)(xCount * yCount)); }
/// <summary> /// Pairwise distance between pairs of objects /// </summary> /// <see cref="http://www.mathworks.cn/help/toolbox/stats/pdist.html"/> /// <see cref="http://www.mathworks.cn/help/toolbox/stats/squareform.html"/> /// <param name="m"></param> /// <param name="dis">距离度量方式</param> /// <param name="vtype"></param> /// <returns></returns> public static Matrix PDist(Matrix m, IDistance dis, VectorType vtype = VectorType.Column) { int count = vtype == VectorType.Row ? m.RowCount : m.ColumnCount; DenseMatrix result = new DenseMatrix(count, count); for (int i = 0; i < count; i++) { Vector x1 = (Vector)(vtype == VectorType.Row ? m.Row(i) : m.Column(i)); for (int j = i + 1; j < count; j++) { Vector x2 = (Vector)(vtype == VectorType.Row ? m.Row(j) : m.Column(j)); result[i, j] = dis.Compute(x1, x2); result[j, i] = result[i, j]; } } return(result); }
/// <summary>Distances.</summary> /// <param name="x">The IEnumerable<Vector> to process.</param> /// <param name="y">The IEnumerable<Vector> to process.</param> /// <returns>A double.</returns> public double Distance(IEnumerable <Vector> x, IEnumerable <Vector> y) { double leastDistance = int.MaxValue; for (var i = 0; i < x.Count(); i++) { for (var j = i + 1; j < y.Count(); j++) { var distance = _metric.Compute(x.ElementAt(i), y.ElementAt(j)); if (distance < leastDistance) { leastDistance = distance; } } } return(leastDistance); }
/// <summary>Distances.</summary> /// <param name="x">The IEnumerable<Vector> to process.</param> /// <param name="y">The IEnumerable<Vector> to process.</param> /// <returns>A double.</returns> public double Distance(IEnumerable <Vector> x, IEnumerable <Vector> y) { var maxDistance = double.MinValue; for (var i = 0; i < x.Count(); i++) { for (var j = i + 1; j < y.Count(); j++) { var distance = _metric.Compute(x.ElementAt(i), y.ElementAt(j)); if (distance > maxDistance) { maxDistance = distance; } } } return(maxDistance); }
public double Distance(IEnumerable <Vector> x, IEnumerable <Vector> y) { var length = x.ElementAt(0).Length; Vector xs = new Vector(length); Vector ys = new Vector(length); // Sum up all values in x foreach (var v in x) { for (int i = 0; i < v.Length; i++) { xs[i] += v[i]; } } // Sum up all values in y foreach (var v in y) { for (int i = 0; i < v.Length; i++) { ys[i] += v[i]; } } // Calculate the average values for (int i = 0; i < xs.Length; i++) { xs[i] = xs[i] / length; } // Calculate the average values for (int i = 0; i < ys.Length; i++) { ys[i] = ys[i] / length; } return(_distanceMetric.Compute(xs, ys)); }
public double Distance(IEnumerable <Vector> x, IEnumerable <Vector> y) { double distance = -1; double leastDistance = Int32.MaxValue; for (int i = 0; i < x.Count(); i++) { for (int j = i + 1; j < y.Count(); j++) { distance = _distanceMetric.Compute(x.ElementAt(i), y.ElementAt(j)); if (distance < leastDistance) { leastDistance = distance; } } } return(leastDistance); }
/// <summary>Distances.</summary> /// <param name="x">The IEnumerable<Vector> to process.</param> /// <param name="y">The IEnumerable<Vector> to process.</param> /// <returns>A double.</returns> public double Distance(IEnumerable <Vector> x, IEnumerable <Vector> y) { return(_metric.Compute(x.Mean(), y.Mean())); }