void knn_recompute_exact_dists(int nq, int nb, int d, int k, const float *b, const float *v, int label0, int *kp, const int *idx, float *dis) { long q, i; for(q = 0; q < nq; q++) { const float * vq = v + d * q; for(i = kp[q]; i < k; i++) { long j = idx[q * k + i] - label0; assert(j >= 0); if(j >= nb) break; dis[q * k + i] = fvec_distance_L2sqr(vq, b + j * d, d); } kp[q] = i; } }
double fvec_distance_L2 (const float * v1, const float * v2, long n) { return sqrt (fvec_distance_L2sqr (v1, v2, n)); }