5 hasher::hasher(
size_t num_hash,
size_t num_rand, vector<float> lens,
size_t d_vals,
float min_interest):hashmat(lens.size(), num_hash), tor_hashes(d_vals+2), rand_scores(num_rand, num_hash), rand_vecs(num_rand, lens.size()),d_test(d_vals, 0){
7 for(
size_t i = 0; i < lens.size(); i++){
8 mnorm += lens[i]*lens[i];
12 tor_hashes[0]=vector<vector<size_t> >(num_hash, vector<size_t>(ceil(
mnorm/(min_interest/2.0)), 0));
13 tor_hashes[1]=vector<vector<size_t> >(num_hash, vector<size_t>(ceil(
mnorm/min_interest), 0));
17 float gval = min_interest;
18 size_t num_buckets = ceil(
mnorm / gval);
19 tor_hashes[i] = vector<vector<size_t> >(num_hash, vector<size_t>(num_buckets, 0));
21 size_t dim = lens.size();
25 for(
size_t i = 0; i < num_rand; i++){
26 for(
size_t j = 0; j < dim; j++){
27 rand_vecs(i, j) = (rand()*1.0/RAND_MAX)*lens[j];
31 for(
size_t j = 0; j < num_hash; j++){
33 for(
size_t i = 0; i < dim; i++){
34 float rval = rand() * (1.0/RAND_MAX);
40 norm = 1.0/sqrtf(norm);
41 for(
size_t i = 0; i < dim; i++){
52 size_t stemp = floor(n_bins*hval/
mnorm);
54 cout << hval <<
" " << n_bins <<
" " <<
mnorm << endl;
59 hashes.noalias()=invecs*
hashmat;
70 for(
size_t j = 0; j < (size_t)hvals.cols(); j++){
71 for(
size_t i = 0; i < (size_t)hvals.rows(); i++){
73 hvec[j][
get_bin(hvals(i, j), hvec[j].size())]++;
85 vector<vector<size_t> >& hvecm2 =
tor_hashes[g-2];
93 for(
size_t i = 0; i < (size_t)hvals.rows(); i++){
99 for(
size_t j = 0; j < (size_t)hvals.cols(); j++){
109 size_t num_near_tmp = hvec[j][
get_bin(hvals(i, j), hvec[j].size())];
110 long num_far_tmp = (long)hvecm2[j][
get_bin(hvals(i, j), hvec[j].size())];
111 num_near += num_near_tmp;
113 num_far_tmp = (num_far_tmp == 0);
114 num_far += num_far_tmp;
115 pr_far += (pow(0.5, num_near_tmp) + num_far_tmp);
116 num_ave += (1+num_far_tmp);
127 size_t num_bel_min = 0;
130 for(
size_t r = 0; r < (size_t)
rand_vecs.rows(); r++){
134 for(
size_t i = 0; i < (size_t)lcur->rows(); i++){
135 float cdist = (
rand_vecs.row(r) - lcur->row(i)).norm();
146 cout << scores[0]*
rand_vecs.rows() <<
", " << num_bel_min << endl;
153 size_t dim, num_vec, num_inc;
154 float in_inc, mul_val;
160 std::vector<float> lens(dim, 2*3.14159);
162 float min_int = 0.25;
163 hasher hh(15, 10000, lens, d_vals, min_int);
164 rmf vvals(rmf::Zero(num_vec, dim));
165 for(
size_t g =0; g < num_inc; g++){
167 float cur_inc=in_inc;
168 for(
size_t j = 0; j < dim; j++){
169 vvals(0, j) = fmod(vvals(num_vec-1, j)+cur_inc, lens[j]);
173 for(
size_t i = 1; i < num_vec; i++){
175 for(
size_t j = 0; j < dim; j++){
176 vvals(i, j) = fmod(vvals(i-1, j)+cur_inc, lens[j]);
181 cout <<
"getting_scores" << endl;
183 cout << scores[0] << endl;