File IndexNNDescent.h
- 
namespace faiss
- Implementation of k-means clustering with many variants. - Copyright (c) Facebook, Inc. and its affiliates. - This source code is licensed under the MIT license found in the LICENSE file in the root directory of this source tree. - IDSelector is intended to define a subset of vectors to handle (for removal or as subset to search) - PQ4 SIMD packing and accumulation functions - The basic kernel accumulates nq query vectors with bbs = nb * 2 * 16 vectors and produces an output matrix for that. It is interesting for nq * nb <= 4, otherwise register spilling becomes too large. - The implementation of these functions is spread over 3 cpp files to reduce parallel compile times. Templates are instantiated explicitly. - This file contains callbacks for kernels that compute distances. - Throughout the library, vectors are provided as float * pointers. Most algorithms can be optimized when several vectors are processed (added/searched) together in a batch. In this case, they are passed in as a matrix. When n vectors of size d are provided as float * x, component j of vector i is - x[ i * d + j ] - where 0 <= i < n and 0 <= j < d. In other words, matrices are always compact. When specifying the size of the matrix, we call it an n*d matrix, which implies a row-major storage. - I/O functions can read/write to a filename, a file handle or to an object that abstracts the medium. - The read functions return objects that should be deallocated with delete. All references within these objectes are owned by the object. - Definition of inverted lists + a few common classes that implement the interface. - Since IVF (inverted file) indexes are of so much use for large-scale use cases, we group a few functions related to them in this small library. Most functions work both on IndexIVFs and IndexIVFs embedded within an IndexPreTransform. - In this file are the implementations of extra metrics beyond L2 and inner product - Implements a few neural net layers, mainly to support QINCo - Defines a few objects that apply transformations to a set of vectors Often these are pre-processing steps. - 
struct IndexNNDescent : public faiss::Index
- #include <IndexNNDescent.h>The NNDescent index is a normal random-access index with an NNDescent link structure built on top Subclassed by faiss::IndexNNDescentFlat Public Types - 
using storage_idx_t = NNDescent::storage_idx_t
 Public Functions - 
explicit IndexNNDescent(int d = 0, int K = 32, MetricType metric = METRIC_L2)
 - 
~IndexNNDescent() override
 - 
virtual void add(idx_t n, const float *x) override
- Add n vectors of dimension d to the index. - Vectors are implicitly assigned labels ntotal .. ntotal + n - 1 This function slices the input vectors in chunks smaller than blocksize_add and calls add_core. - Parameters:
- n – number of vectors 
- x – input matrix, size n * d 
 
 
 - 
virtual void search(idx_t n, const float *x, idx_t k, float *distances, idx_t *labels, const SearchParameters *params = nullptr) const override
- entry point for search 
 - 
virtual void reconstruct(idx_t key, float *recons) const override
- Reconstruct a stored vector (or an approximation if lossy coding) - this function may not be defined for some indexes - Parameters:
- key – id of the vector to reconstruct 
- recons – reconstucted vector (size d) 
 
 
 - 
virtual void reset() override
- removes all elements from the database. 
 
- 
using storage_idx_t = NNDescent::storage_idx_t
 - 
struct IndexNNDescentFlat : public faiss::IndexNNDescent
- #include <IndexNNDescent.h>Flat index topped with with a NNDescent structure to access elements more efficiently. Public Types - 
using storage_idx_t = NNDescent::storage_idx_t
 Public Functions - 
IndexNNDescentFlat()
 - 
IndexNNDescentFlat(int d, int K, MetricType metric = METRIC_L2)
 - 
virtual void add(idx_t n, const float *x) override
- Add n vectors of dimension d to the index. - Vectors are implicitly assigned labels ntotal .. ntotal + n - 1 This function slices the input vectors in chunks smaller than blocksize_add and calls add_core. - Parameters:
- n – number of vectors 
- x – input matrix, size n * d 
 
 
 - 
virtual void search(idx_t n, const float *x, idx_t k, float *distances, idx_t *labels, const SearchParameters *params = nullptr) const override
- entry point for search 
 - 
virtual void reconstruct(idx_t key, float *recons) const override
- Reconstruct a stored vector (or an approximation if lossy coding) - this function may not be defined for some indexes - Parameters:
- key – id of the vector to reconstruct 
- recons – reconstucted vector (size d) 
 
 
 - 
virtual void reset() override
- removes all elements from the database. 
 
- 
using storage_idx_t = NNDescent::storage_idx_t
 
- 
struct IndexNNDescent : public faiss::Index