@Reference(type=Article,
author={"Jegou, Herve","Douze, Matthijs","Schmid, Cordelia"},
title="Product Quantization for Nearest Neighbor Search",
year="2011",
journal="IEEE Trans. Pattern Anal. Mach. Intell.",
pages={"117","","128"},
url="http://dx.doi.org/10.1109/TPAMI.2010.57",
month="January",
number="1",
publisher="IEEE Computer Society",
volume="33",
customData={"issn","0162-8828","numpages","12","doi","10.1109/TPAMI.2010.57","acmid","1916695","address","Washington, DC, USA","keywords","High-dimensional indexing, High-dimensional indexing, image indexing, very large databases, approximate search., approximate search., image indexing, very large databases"})
public class DoubleADCNearestNeighbours
extends DoubleNearestNeighbours
For efficiency, the distance of each sub-vector of a query is computed to every centroid (for the sub-vector under consideration) only once, and is then cached for the lookup during the computation of the distance to each database vector.
| Modifier and Type | Field and Description |
|---|---|
protected byte[][] |
data |
protected int |
ndims |
protected DoubleProductQuantiser |
pq |
| Constructor and Description |
|---|
DoubleADCNearestNeighbours(DoubleProductQuantiser pq,
byte[][] pqData,
int ndims)
Construct the ADC with the given quantiser and pre-quantised data .
|
DoubleADCNearestNeighbours(DoubleProductQuantiser pq,
double[][] dataPoints)
Construct the ADC with the given quantiser and data points.
|
| Modifier and Type | Method and Description |
|---|---|
protected void |
computeDistances(double[] fullQuery,
org.openimaj.util.queue.BoundedPriorityQueue<org.openimaj.util.pair.IntDoublePair> queue,
org.openimaj.util.pair.IntDoublePair wp) |
int |
numDimensions()
Get the number of dimensions of each vector in the dataset
|
void |
searchKNN(double[][] qus,
int K,
int[][] indices,
double[][] distances)
Search for the K nearest neighbours to each of the N queries, and return
the indices of each nearest neighbour and their respective distances.
|
List<org.openimaj.util.pair.IntDoublePair> |
searchKNN(double[] query,
int K)
Search for the K nearest neighbours to the given query and return an
ordered list of pairs containing the distance and index of each
neighbour.
|
void |
searchKNN(List<double[]> qus,
int K,
int[][] indices,
double[][] distances)
Search for the K nearest neighbours to each of the N queries, and return
the indices of each nearest neighbour and their respective distances.
|
org.openimaj.util.pair.IntDoublePair |
searchNN(double[] query)
Search for the nearest neighbour to the given query and return a pair
containing the distance and index of that neighbour.
|
void |
searchNN(double[][] qus,
int[] indices,
double[] distances)
Search for the nearest neighbour to each of the N queries, and return the
index of each nearest neighbour and the respective distance.
|
void |
searchNN(List<double[]> qus,
int[] indices,
double[] distances)
Search for the nearest neighbour to each of the N queries, and return the
index of each nearest neighbour and the respective distance.
|
int |
size()
Get the size of the dataset
|
distanceFunc, distanceFunc, distanceFunc, distanceFuncprotected final DoubleProductQuantiser pq
protected final int ndims
protected final byte[][] data
public DoubleADCNearestNeighbours(DoubleProductQuantiser pq, double[][] dataPoints)
pq - the Product QuantiserdataPoints - the data points to indexpublic DoubleADCNearestNeighbours(DoubleProductQuantiser pq, byte[][] pqData, int ndims)
pq - the Product QuantiserpqData - the pre-quantised data (i.e. vectors already quantised with
the given pq)ndims - the dimensionality of the indexed datapublic void searchNN(double[][] qus, int[] indices, double[] distances)
NearestNeighboursFor efficiency, to use this method, you need to pre-construct the arrays for storing the results outside of the method and pass them in as arguments.
If a nearest-neighbour cannot be determined, it will have an index value of -1
qus - An array of N query vectorsindices - The return N-dimensional array for holding the indices of the
nearest neighbour of each respective query.distances - The return N-dimensional array for holding the distances of
the nearest neighbour to each respective query.public void searchKNN(double[][] qus, int K, int[][] indices, double[][] distances)
NearestNeighboursFor efficiency, to use this method, you need to pre-construct the arrays for storing the results outside of the method and pass them in as arguments.
If a k-th nearest-neighbour cannot be determined, it will have an index value of -1
qus - An array of N query vectorsK - the number of neighbours to findindices - The return N*K-dimensional array for holding the indices of
the K nearest neighbours of each respective query.distances - The return N*K-dimensional array for holding the distances of
the nearest neighbours of each respective query.public void searchNN(List<double[]> qus, int[] indices, double[] distances)
NearestNeighboursFor efficiency, to use this method, you need to pre-construct the arrays for storing the results outside of the method and pass them in as arguments.
If a nearest-neighbour cannot be determined, it will have an index value of -1
qus - An array of N query vectorsindices - The return N-dimensional array for holding the indices of the
nearest neighbour of each respective query.distances - The return N-dimensional array for holding the distances of
the nearest neighbour to each respective query.public void searchKNN(List<double[]> qus, int K, int[][] indices, double[][] distances)
NearestNeighboursFor efficiency, to use this method, you need to pre-construct the arrays for storing the results outside of the method and pass them in as arguments.
If a k-th nearest-neighbour cannot be determined, it will have an index value of -1
qus - An array of N query vectorsK - the number of neighbours to findindices - The return N*K-dimensional array for holding the indices of
the K nearest neighbours of each respective query.distances - The return N*K-dimensional array for holding the distances of
the nearest neighbours of each respective query.public List<org.openimaj.util.pair.IntDoublePair> searchKNN(double[] query, int K)
NearestNeighboursIf k neighbours cannot be determined, then the resultant list might have fewer than k elements.
query - the query vectorK - the number of neighbours to search forpublic org.openimaj.util.pair.IntDoublePair searchNN(double[] query)
NearestNeighbours
If the nearest-neighbour cannot be determined null will be
returned.
query - the query vectorprotected void computeDistances(double[] fullQuery, org.openimaj.util.queue.BoundedPriorityQueue<org.openimaj.util.pair.IntDoublePair> queue, org.openimaj.util.pair.IntDoublePair wp)
public int numDimensions()
DoubleNearestNeighboursnumDimensions in class DoubleNearestNeighbourspublic int size()
NearestNeighbours