Пример #1
0
 private static double[] CalcDistances(IList <BaseVector> x, BaseVector xTest, IDistance distance)
 {
     double[] result = new double[x.Count];
     for (int i = 0; i < x.Count; i++)
     {
         result[i] = distance.Get(x[i], xTest);
     }
     return(result);
 }
 /// <summary>
 /// Create distance matrix from <see cref="IDistance"/>.
 /// </summary>
 /// <param name="data"></param>
 /// <param name="distance"></param>
 public GenericDistanceMatrix(MatrixIndexer data, IDistance distance)
 {
     N = data.RowCount;
     _distances = new double[N * (N - 1) / 2];
     int k = 0;
     for (int i = 0; i < N; i++)
     {
         var xi = data.GetRow(i);
         for (int j = i+1; j < N; j++)
         {
             _distances[k++] = distance.Get(xi, data.GetRow(j));
         }
     }
 }
        /// <summary>
        /// Create distance matrix from <see cref="IDistance"/>.
        /// </summary>
        /// <param name="data"></param>
        /// <param name="distance"></param>
        public GenericDistanceMatrix(MatrixIndexer data, IDistance distance)
        {
            N         = data.RowCount;
            distances = new double[N * (N - 1) / 2];
            int k = 0;

            for (int i = 0; i < N; i++)
            {
                BaseVector xi = data.GetRow(i);
                for (int j = i + 1; j < N; j++)
                {
                    distances[k++] = distance.Get(xi, data.GetRow(j));
                }
            }
        }
        private static float[,] DistanceMatrix(MatrixIndexer data, IDistance distance, MatrixAccess access)
        {
            int nrows     = data.RowCount;
            int ncols     = data.ColumnCount;
            int nelements = (access == MatrixAccess.Rows) ? nrows : ncols;

            float[,] result = new float[nelements, nelements];
            for (int i = 0; i < nelements; i++)
            {
                for (int j = 0; j < i; j++)
                {
                    result[i, j] = (float)distance.Get(GetVector(data, i, access), GetVector(data, j, access));
                }
            }
            return(result);
        }
Пример #5
0
            private static double[][] ComputeDistances(IReadOnlyList <T> x, IDistance <T> distance)
            {
                var res = new double[x.Count][];

                for (var r = 0; r < x.Count; r++)
                {
                    var rowV = new double[x.Count];
                    // all distances must be symmetric
                    for (var c = 0; c < r; c++)
                    {
                        rowV[c] = res[c][r];
                    }
                    rowV[r] = 0.0; // distance to self is zero for all distances
                    for (var c = r + 1; c < x.Count; c++)
                    {
                        rowV[c] = distance.Get(x[r], x[c]);
                    }
                    res[r] = rowV;
                }
                return(res);
                // return x.Select(m => x.Select(n => distance.Get(m, n)).ToArray()).ToArray();
            }
Пример #6
0
 public override double Get(IndexedItem <T> a, IndexedItem <T> b)
 {
     return(dist.Get(a.Value, b.Value));
 }
Пример #7
0
 public int Compare(T x, T y)
 {
     return(dist.Get(x, item).CompareTo(dist.Get(y, item)));
 }
 private static float[,] DistanceMatrix(MatrixIndexer data, IDistance distance, MatrixAccess access)
 {
     int nrows = data.RowCount;
     int ncols = data.ColumnCount;
     int nelements = (access == MatrixAccess.Rows) ? nrows : ncols;
     float[,] result = new float[nelements, nelements];
     for (int i = 0; i < nelements; i++){
         for (int j = 0; j < i; j++){
             result[i, j] = (float) distance.Get(GetVector(data, i, access), GetVector(data, j, access));
         }
     }
     return result;
 }