/** * Construct the DoubleNearestNeighboursKDTree with the given options. * * @param pnts the data * @param ntrees the number of trees * @param nchecks the number of checks during search */ public DoubleNearestNeighboursKDTree(final double [][] pnts, int ntrees, int nchecks) { kdt = new DoubleKDTreeEnsemble(pnts, ntrees); this.nchecks = nchecks; }
@Override public void searchNN(double[][] qus, int[] argmins, double[] mins) { final int N = qus.length; IntDoublePair [] nn = new IntDoublePair[1]; for (int n=0; n < N; ++n) { kdt.search(qus[n], 1, nn, nchecks); argmins[n] = nn[0].first; mins[n] = nn[0].second; } }
@Override public IntDoublePair searchNN(double[] query) { final IntDoublePair[] nn = new IntDoublePair[1]; kdt.search(query, 1, nn, nchecks); return nn[0]; } }
/** * Construct the DoubleNearestNeighboursKDTree with the given options. * * @param pnts the data * @param ntrees the number of trees * @param nchecks the number of checks during search */ public DoubleNearestNeighboursKDTree(final double [][] pnts, int ntrees, int nchecks) { kdt = new DoubleKDTreeEnsemble(pnts, ntrees); this.nchecks = nchecks; }
@Override public IntDoublePair searchNN(double[] query) { final IntDoublePair[] nn = new IntDoublePair[1]; kdt.search(query, 1, nn, nchecks); return nn[0]; } }
@Override public void searchNN(double[][] qus, int[] argmins, double[] mins) { final int N = qus.length; IntDoublePair [] nn = new IntDoublePair[1]; for (int n=0; n < N; ++n) { kdt.search(qus[n], 1, nn, nchecks); argmins[n] = nn[0].first; mins[n] = nn[0].second; } }
@Override public void searchKNN(double[][] qus, int K, int[][] argmins, double[][] mins) { // Fix for when the user asks for too many points. K = Math.min(K, kdt.pnts.length); IntDoublePair[] nns = new IntDoublePair[K]; final int N = qus.length; for (int n=0; n < N; ++n) { kdt.search(qus[n], K, nns, nchecks); for (int k=0; k < K; ++k) { argmins[n][k] = nns[k].first; mins[n][k] = nns[k].second; } } }
@Override public void searchKNN(double[][] qus, int K, int[][] argmins, double[][] mins) { // Fix for when the user asks for too many points. K = Math.min(K, kdt.pnts.length); IntDoublePair[] nns = new IntDoublePair[K]; final int N = qus.length; for (int n=0; n < N; ++n) { kdt.search(qus[n], K, nns, nchecks); for (int k=0; k < K; ++k) { argmins[n][k] = nns[k].first; mins[n][k] = nns[k].second; } } }
@Override public void searchNN(List<double[]> qus, int[] argmins, double[] mins) { final int N = qus.size(); IntDoublePair [] nn = new IntDoublePair[1]; for (int n=0; n < N; ++n) { kdt.search(qus.get(n), 1, nn, nchecks); argmins[n] = nn[0].first; mins[n] = nn[0].second; } }
@Override public List<IntDoublePair> searchKNN(double[] query, int K) { // Fix for when the user asks for too many points. K = Math.min(K, kdt.pnts.length); final IntDoublePair[] nns = new IntDoublePair[K]; kdt.search(query, K, nns, nchecks); return Arrays.asList(nns); }
@Override public void searchNN(List<double[]> qus, int[] argmins, double[] mins) { final int N = qus.size(); IntDoublePair [] nn = new IntDoublePair[1]; for (int n=0; n < N; ++n) { kdt.search(qus.get(n), 1, nn, nchecks); argmins[n] = nn[0].first; mins[n] = nn[0].second; } }
@Override public List<IntDoublePair> searchKNN(double[] query, int K) { // Fix for when the user asks for too many points. K = Math.min(K, kdt.pnts.length); final IntDoublePair[] nns = new IntDoublePair[K]; kdt.search(query, K, nns, nchecks); return Arrays.asList(nns); }
@Override public void searchKNN(List<double[]> qus, int K, int[][] argmins, double[][] mins) { // Fix for when the user asks for too many points. K = Math.min(K, kdt.pnts.length); IntDoublePair[] nns = new IntDoublePair[K]; final int N = qus.size(); for (int n=0; n < N; ++n) { kdt.search(qus.get(n), K, nns, nchecks); for (int k=0; k < K; ++k) { argmins[n][k] = nns[k].first; mins[n][k] = nns[k].second; } } }
@Override public void searchKNN(List<double[]> qus, int K, int[][] argmins, double[][] mins) { // Fix for when the user asks for too many points. K = Math.min(K, kdt.pnts.length); IntDoublePair[] nns = new IntDoublePair[K]; final int N = qus.size(); for (int n=0; n < N; ++n) { kdt.search(qus.get(n), K, nns, nchecks); for (int k=0; k < K; ++k) { argmins[n][k] = nns[k].first; mins[n][k] = nns[k].second; } } }