Exemplo n.º 1
0
        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()));
        }
Exemplo n.º 2
0
        /// <summary>Distances.</summary>
        /// <param name="x">The IEnumerable&lt;Vector&gt; to process.</param>
        /// <param name="y">The IEnumerable&lt;Vector&gt; 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));
        }
Exemplo n.º 3
0
        /// <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);
        }
Exemplo n.º 4
0
        /// <summary>Distances.</summary>
        /// <param name="x">The IEnumerable&lt;Vector&gt; to process.</param>
        /// <param name="y">The IEnumerable&lt;Vector&gt; 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);
        }
Exemplo n.º 5
0
        /// <summary>Distances.</summary>
        /// <param name="x">The IEnumerable&lt;Vector&gt; to process.</param>
        /// <param name="y">The IEnumerable&lt;Vector&gt; 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);
        }
Exemplo n.º 6
0
        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));
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
 /// <summary>Distances.</summary>
 /// <param name="x">The IEnumerable&lt;Vector&gt; to process.</param>
 /// <param name="y">The IEnumerable&lt;Vector&gt; to process.</param>
 /// <returns>A double.</returns>
 public double Distance(IEnumerable <Vector> x, IEnumerable <Vector> y)
 {
     return(_metric.Compute(x.Mean(), y.Mean()));
 }