53 struct random_data rand_data;
71 double rand_double ();
82 void float_rand (
float * x,
size_t n,
long seed);
83 void float_randn (
float * x,
size_t n,
long seed);
84 void long_rand (
long * x,
size_t n,
long seed);
85 void byte_rand (uint8_t * x,
size_t n,
long seed);
88 void rand_perm (
int * perm,
size_t n,
long seed);
103 float fvec_inner_product (
126 long nq,
const float *xq,
127 long nb,
const float *xb,
129 long ldq = -1,
long ldb = -1,
long ldd = -1);
133 void fvec_inner_products_ny (
137 size_t d,
size_t ny);
141 float * __restrict dis,
144 size_t d,
size_t ny);
156 void fvec_norms_L2 (
float * ip,
const float * x,
size_t d,
size_t nx);
159 void fvec_norms_L2sqr (
float * ip,
const float * x,
size_t d,
size_t nx);
162 void fvec_renorm_L2 (
size_t d,
size_t nx,
float * x);
168 void inner_product_to_L2sqr (
float * __restrict dis,
171 size_t n1,
size_t n2);
179 void fvec_inner_products_by_idx (
180 float * __restrict ip,
183 const long * __restrict ids,
184 size_t d,
size_t nx,
size_t ny);
187 void fvec_L2sqr_by_idx (
188 float * __restrict dis,
191 const long * __restrict ids,
192 size_t d,
size_t nx,
size_t ny);
209 size_t d,
size_t nx,
size_t ny,
216 size_t d,
size_t nx,
size_t ny,
227 size_t d,
size_t nx,
size_t ny,
229 const float *base_shift);
232 void knn_inner_products_by_idx (
235 const long * __restrict ids,
236 size_t d,
size_t nx,
size_t ny,
239 void knn_L2sqr_by_idx (
const float * x,
241 const long * __restrict ids,
242 size_t d,
size_t nx,
size_t ny,
265 size_t d,
size_t nx,
size_t ny,
273 size_t d,
size_t nx,
size_t ny,
293 void fvec_madd (
size_t n,
const float *a,
294 float bf,
const float *b,
float *c);
301 float bf,
const float *b,
float *c);
305 void reflection (
const float * u,
float * x,
size_t n,
size_t d,
size_t nu);
313 size_t d,
size_t k,
size_t n);
327 size_t k2,
const long *v2);
330 void fvec_argsort (
size_t n,
const float *vals,
333 void fvec_argsort_parallel (
size_t n,
const float *vals,
338 int ivec_hist (
size_t n,
const int * v,
int vmax,
int *hist);
345 void bincode_hist(
size_t n,
size_t nbits,
const uint8_t *codes,
int *hist);
random generator that can be used in multithreaded contexts
void knn_L2sqr_base_shift(const float *x, const float *y, size_t d, size_t nx, size_t ny, float_maxheap_array_t *res, const float *base_shift)
RandomGenerator(long seed=1234)
initialize
int km_update_centroids(const float *x, float *centroids, long *assign, size_t d, size_t k, size_t n)
float fvec_L2sqr(const float *x, const float *y, size_t d)
Squared L2 distance between two vectors.
void bincode_hist(size_t n, size_t nbits, const uint8_t *codes, int *hist)
void ranklist_handle_ties(int k, long *idx, const float *dis)
float rand_float()
between 0 and 1
void fvec_madd(size_t n, const float *a, float bf, const float *b, float *c)
size_t get_mem_usage_kb()
get current RSS usage in kB
int ivec_hist(size_t n, const int *v, int vmax, int *hist)
compute histogram on v
long rand_long()
random long < 2 ^ 62
int rand_int()
random 31-bit positive integer
size_t ranklist_intersection_size(size_t k1, const long *v1, size_t k2, const long *v2_in)
void pairwise_L2sqr(long d, long nq, const float *xq, long nb, const float *xb, float *dis, long ldq, long ldb, long ldd)
void range_search_inner_product(const float *x, const float *y, size_t d, size_t nx, size_t ny, float radius, RangeSearchResult *res)
same as range_search_L2sqr for the inner product similarity
void knn_inner_product(const float *x, const float *y, size_t d, size_t nx, size_t ny, float_minheap_array_t *res)
double getmillisecs()
ms elapsed since some arbitrary epoch
double imbalance_factor(int k, const int *hist)
same, takes a histogram as input
float fvec_norm_L2sqr(const float *x, size_t d)
void range_search_L2sqr(const float *x, const float *y, size_t d, size_t nx, size_t ny, float radius, RangeSearchResult *res)
void matrix_qr(int m, int n, float *a)
size_t ivec_checksum(size_t n, const int *a)
compute a checksum on a table.
int fvec_madd_and_argmin(size_t n, const float *a, float bf, const float *b, float *c)
void knn_L2sqr(const float *x, const float *y, size_t d, size_t nx, size_t ny, float_maxheap_array_t *res)