/** * 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 int numDimensions() { return nn.numDimensions(); } }
@Override public DoubleNearestNeighboursKDTree create(double[][] data) { return new DoubleNearestNeighboursKDTree(data, ntrees, nchecks); } }
@Override public ByteNearestNeighboursKDTree create(byte[][] data) { return new ByteNearestNeighboursKDTree(data, ntrees, nchecks); } }
@Override public LongNearestNeighboursKDTree create(long[][] data) { return new LongNearestNeighboursKDTree(data, ntrees, nchecks); } }
@Override public ShortNearestNeighboursKDTree create(short[][] data) { return new ShortNearestNeighboursKDTree(data, ntrees, nchecks); } }
@Override public IntFloatPair searchNN(byte[] query) { final IntFloatPair[] nn = new IntFloatPair[1]; kdt.search(query, 1, nn, nchecks); return nn[0]; } }
/** * Construct the ShortNearestNeighboursKDTree with the given options. * * @param pnts the data * @param ntrees the number of trees * @param nchecks the number of checks during search */ public ShortNearestNeighboursKDTree(final short [][] pnts, int ntrees, int nchecks) { kdt = new ShortKDTreeEnsemble(pnts, ntrees); this.nchecks = nchecks; }
@Override public void searchNN(long[][] 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 int[] assign(double[][] data) { int [] argmins = new int [data.length]; double [] mins = new double [data.length]; nn.searchNN(data, argmins, mins); return argmins; }
@Override public int[] assign(float[][] data) { int [] argmins = new int [data.length]; float [] mins = new float [data.length]; nn.searchNN(data, argmins, mins); return argmins; }
@Override public int[] assign(long[][] data) { int [] argmins = new int [data.length]; double [] mins = new double [data.length]; nn.searchNN(data, argmins, mins); return argmins; }
/** * Construct the FloatNearestNeighboursKDTree with the given options. * * @param pnts the data * @param ntrees the number of trees * @param nchecks the number of checks during search */ public FloatNearestNeighboursKDTree(final float [][] pnts, int ntrees, int nchecks) { kdt = new FloatKDTreeEnsemble(pnts, ntrees); this.nchecks = nchecks; }
@Override public IntFloatPair searchNN(int[] query) { final IntFloatPair[] nn = new IntFloatPair[1]; kdt.search(query, 1, nn, nchecks); return nn[0]; } }
/** * Construct the ByteNearestNeighboursKDTree with the given options. * * @param pnts the data * @param ntrees the number of trees * @param nchecks the number of checks during search */ public ByteNearestNeighboursKDTree(final byte [][] pnts, int ntrees, int nchecks) { kdt = new ByteKDTreeEnsemble(pnts, ntrees); this.nchecks = nchecks; }
@Override public void searchNN(byte[][] qus, int[] argmins, float[] mins) { final int N = qus.length; IntFloatPair [] nn = new IntFloatPair[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; } }
/** * 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 IntFloatPair searchNN(byte[] query) { final IntFloatPair[] nn = new IntFloatPair[1]; kdt.search(query, 1, nn, nchecks); return nn[0]; } }