Struct faiss::OPQMatrix
- 
struct OPQMatrix : public faiss::LinearTransform
- Applies a rotation to align the dimensions with a PQ to minimize the reconstruction error. Can be used before an IndexPQ or an IndexIVFPQ. The method is the non-parametric version described in: - “Optimized Product Quantization for Approximate Nearest Neighbor Search” Tiezheng Ge, Kaiming He, Qifa Ke, Jian Sun, CVPR’13 - Public Functions - 
explicit OPQMatrix(int d = 0, int M = 1, int d2 = -1)
- if d2 != -1, output vectors of this dimension 
 - 
virtual void train(idx_t n, const float *x) override
- Perform training on a representative set of vectors. Does nothing by default. - Parameters:
- n – nb of training vectors 
- x – training vecors, size n * d 
 
 
 - 
virtual void apply_noalloc(idx_t n, const float *x, float *xt) const override
- same as apply, but result is pre-allocated 
 - 
void transform_transpose(idx_t n, const float *y, float *x) const
- compute x = A^T * (x - b) is reverse transform if A has orthonormal lines 
 - 
virtual void reverse_transform(idx_t n, const float *xt, float *x) const override
- works only if is_orthonormal 
 - 
void set_is_orthonormal()
- compute A^T * A to set the is_orthonormal flag 
 - 
void print_if_verbose(const char *name, const std::vector<double> &mat, int n, int d) const
 - 
virtual void check_identical(const VectorTransform &other) const override
 - 
float *apply(idx_t n, const float *x) const
- apply the transformation and return the result in an allocated pointer - Parameters:
- n – number of vectors to transform 
- x – input vectors, size n * d_in 
 
- Returns:
- output vectors, size n * d_out 
 
 - Public Members - 
int M
- nb of subquantizers 
 - 
int niter = 50
- Number of outer training iterations. 
 - 
int niter_pq = 4
- Number of training iterations for the PQ. 
 - 
int niter_pq_0 = 40
- same, for the first outer iteration 
 - 
size_t max_train_points = 256 * 256
- if there are too many training points, resample 
 - 
bool verbose = false
 - 
ProductQuantizer *pq = nullptr
- if non-NULL, use this product quantizer for training should be constructed with (d_out, M, _) 
 - 
bool have_bias
 - 
bool is_orthonormal
- ! whether to use the bias term - check if matrix A is orthonormal (enables reverse_transform) 
 - 
std::vector<float> A
- Transformation matrix, size d_out * d_in. 
 - 
std::vector<float> b
- bias vector, size d_out 
 - 
int d_in
 - 
int d_out
- ! input dimension 
 - 
bool is_trained
- set if the VectorTransform does not require training, or if training is done already 
 
- 
explicit OPQMatrix(int d = 0, int M = 1, int d2 = -1)