#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 25 of file ProductQuantizer.h.
initialization
Definition at line 40 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 565 of file ProductQuantizer.cpp.
1.8.5