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); }
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(); }
public override double Get(IndexedItem <T> a, IndexedItem <T> b) { return(dist.Get(a.Value, b.Value)); }
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; }