/// <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));
         }
     }
 }
 private static BaseVector GetVector(MatrixIndexer data, int index, MatrixAccess access)
 {
     return access == MatrixAccess.Rows ? data.GetRow(index) : data.GetColumn(index);
 }