Exemple #1
0
void pdist_cosine(const double *X, double *dm, int m, int n, const double *norms) {
  int i, j;
  const double *u, *v;
  double *it = dm;
  for (i = 0; i < m; i++) {
    for (j = i + 1; j < m; j++, it++) {
      u = X + (n * i);
      v = X + (n * j);
      *it = cosine_distance(u, v, n, norms[i], norms[j]);
    }
  }
}
Exemple #2
0
void rank_for_vector(void *fv_pointer,size_t query_index, vector<vector<pair<size_t ,float>>> &results, size_t size_rows,
                     size_t size_cols, size_t results_pos) {
    float similarities[NN];
    size_t neighbors[NN];
    vector<pair<size_t, float>> result(NN);
    for (int i = 0; i < NN; i++)
        similarities[i] = OVERFLOW_DISTANCE;
    if (float **feature_vectors = reinterpret_cast<float **>(fv_pointer)) {
//        timestamp_t t0 = get_timestamp();
        for (size_t target_index = 0; target_index < size_rows; target_index++) {
            if (query_index != target_index) { // skipping itself

                float target_distance = cosine_distance(feature_vectors[query_index], feature_vectors[target_index],
                                                        size_cols);


                if (target_distance >= similarities[NN - 1]) {
                    float hold_similarity = target_distance;
                    size_t hold_neighbor = target_index;
                    // Rearrange neighbors
                    for (size_t counter = 0; counter < NN; counter++) {
                        if ((hold_similarity >= similarities[counter])) {

                            float aux_distance = similarities[counter];
                            size_t aux_neighbor = neighbors[counter];

                            similarities[counter] = hold_similarity;
                            neighbors[counter] = hold_neighbor;
                            result[counter] = make_pair(hold_neighbor, hold_similarity);

                            hold_similarity = aux_distance;
                            hold_neighbor = aux_neighbor;
                        }
                    }

                }
            }
        }
//        timestamp_t t1 = get_timestamp();
//        float secs = (t1 - t0) / 1000000.0L;
//
//        cout << "Item Ranking:" << secs << endl;

    }



//    mtx.lock();
    results[results_pos] = result;
//    mtx.unlock();
}
Exemple #3
0
void cdist_cosine(const double *XA,
		  const double *XB, double *dm, int mA, int mB, int n,
		  const double *normsA, const double *normsB) {
  int i, j;
  const double *u, *v;
  double *it = dm;
  for (i = 0; i < mA; i++) {
    for (j = 0; j < mB; j++, it++) {
      u = XA + (n * i);
      v = XB + (n * j);
      *it = cosine_distance(u, v, n, normsA[i], normsB[j]);
    }
  }
}