#include <ProductQuantizer.h>
Public Types | |
enum | train_type_t { Train_default, Train_hot_start, Train_shared, Train_hypercube, Train_hypercube_pca } |
initialization More... | |
Public Member Functions | |
float * | get_centroids (size_t m, size_t i) |
return the centroids associated with subvector m | |
const float * | get_centroids (size_t m, size_t i) const |
void | train (int n, const float *x) |
ProductQuantizer (size_t d, size_t M, size_t nbits) | |
void | set_derived_values () |
compute derived values when d, M and nbits have been set | |
void | set_params (const float *centroids, int m) |
Define the centroids for subquantizer m. | |
void | compute_code (const float *x, uint8_t *code) const |
Quantize one vector with the product quantizer. | |
void | compute_codes (const float *x, uint8_t *codes, size_t n) const |
same as compute_code for several vectors | |
void | decode (const uint8_t *code, float *x) const |
decode a vector from a given code (or n vectors if third argument) | |
void | decode (const uint8_t *code, float *x, size_t n) const |
void | compute_code_from_distance_table (const float *tab, uint8_t *code) const |
void | compute_distance_table (const float *x, float *dis_table) const |
void | compute_inner_prod_table (const float *x, float *dis_table) const |
void | compute_distance_tables (size_t nx, const float *x, float *dis_tables) const |
void | compute_inner_prod_tables (size_t nx, const float *x, float *dis_tables) const |
void | search (const float *x, size_t nx, const uint8_t *codes, const size_t ncodes, float_maxheap_array_t *res, bool init_finalize_heap=true) const |
void | search_ip (const float *x, size_t nx, const uint8_t *codes, const size_t ncodes, float_minheap_array_t *res, bool init_finalize_heap=true) const |
void | compute_sdc_table () |
void | search_sdc (const uint8_t *qcodes, size_t nq, const uint8_t *bcodes, const size_t ncodes, float_maxheap_array_t *res, bool init_finalize_heap=true) const |
Public Attributes | |
size_t | d |
size of the input vectors | |
size_t | M |
number of subquantizers | |
size_t | nbits |
number of bits per quantization index | |
size_t | dsub |
dimensionality of each subvector | |
size_t | byte_per_idx |
nb bytes per code component (1 or 2) | |
size_t | code_size |
byte per indexed vector | |
size_t | ksub |
number of centroids for each subquantizer | |
bool | verbose |
verbose during training? | |
train_type_t | train_type |
ClusteringParameters | cp |
parameters used during clustering | |
std::vector< float > | centroids |
Centroid table, size M * ksub * dsub. | |
std::vector< float > | sdc_table |
Symmetric Distance Table. | |
Product Quantizer. Implemented only for METRIC_L2
Definition at line 26 of file ProductQuantizer.h.
initialization
Definition at line 41 of file ProductQuantizer.h.
void faiss::ProductQuantizer::compute_code_from_distance_table | ( | const float * | tab, |
uint8_t * | code | ||
) | const |
If we happen to have the distance tables precomputed, this is more efficient to compute the codes.
Definition at line 363 of file ProductQuantizer.cpp.
void faiss::ProductQuantizer::compute_distance_table | ( | const float * | x, |
float * | dis_table | ||
) | const |
Compute distance table for one vector.
The distance table for x = [x_0 x_1 .. x_(M-1)] is a M * ksub matrix that contains
dis_table (m, j) = || x_m - c_(m, j)||^2 for m = 0..M-1 and j = 0 .. ksub - 1
where c_(m, j) is the centroid no j of sub-quantizer m.
x | input vector size d |
dis_table | output table, size M * ksub |
Definition at line 410 of file ProductQuantizer.cpp.
void faiss::ProductQuantizer::compute_distance_tables | ( | size_t | nx, |
const float * | x, | ||
float * | dis_tables | ||
) | const |
compute distance table for several vectors
nx | nb of input vectors |
x | input vector size nx * d |
dis_table | output table, size nx * M * ksub |
Definition at line 439 of file ProductQuantizer.cpp.
void faiss::ProductQuantizer::search | ( | const float * | x, |
size_t | nx, | ||
const uint8_t * | codes, | ||
const size_t | ncodes, | ||
float_maxheap_array_t * | res, | ||
bool | init_finalize_heap = true |
||
) | const |
perform a search (L2 distance)
x | query vectors, size nx * d |
nx | nb of queries |
codes | database codes, size ncodes * byte_per_idx |
ncodes | nb of nb vectors |
res | heap array to store results (nh == nx) |
init_finalize_heap | initialize heap (input) and sort (output)? |
Definition at line 540 of file ProductQuantizer.cpp.
void faiss::ProductQuantizer::search_ip | ( | const float * | x, |
size_t | nx, | ||
const uint8_t * | codes, | ||
const size_t | ncodes, | ||
float_minheap_array_t * | res, | ||
bool | init_finalize_heap = true |
||
) | const |
same as search, but with inner product similarity
Definition at line 564 of file ProductQuantizer.cpp.