/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */#include<cstdio>#include<cstdlib>#include<random>#include<faiss/IndexFlat.h>// 64-bit intusingidx_t=faiss::idx_t;intmain(){intd=64;// dimensionintnb=100000;// database sizeintnq=10000;// nb of queriesstd::mt19937rng;std::uniform_real_distribution<>distrib;float*xb=newfloat[d*nb];float*xq=newfloat[d*nq];for(inti=0;i<nb;i++){for(intj=0;j<d;j++)xb[d*i+j]=distrib(rng);xb[d*i]+=i/1000.;}for(inti=0;i<nq;i++){for(intj=0;j<d;j++)xq[d*i+j]=distrib(rng);xq[d*i]+=i/1000.;}faiss::IndexFlatL2index(d);// call constructorprintf("is_trained = %s\n",index.is_trained?"true":"false");index.add(nb,xb);// add vectors to the indexprintf("ntotal = %zd\n",index.ntotal);intk=4;{// sanity check: search 5 first vectors of xbidx_t*I=newidx_t[k*5];float*D=newfloat[k*5];index.search(5,xb,k,D,I);// print resultsprintf("I=\n");for(inti=0;i<5;i++){for(intj=0;j<k;j++)printf("%5zd ",I[i*k+j]);printf("\n");}printf("D=\n");for(inti=0;i<5;i++){for(intj=0;j<k;j++)printf("%7g ",D[i*k+j]);printf("\n");}delete[]I;delete[]D;}{// search xqidx_t*I=newidx_t[k*nq];float*D=newfloat[k*nq];index.search(nq,xq,k,D,I);// print resultsprintf("I (5 first results)=\n");for(inti=0;i<5;i++){for(intj=0;j<k;j++)printf("%5zd ",I[i*k+j]);printf("\n");}printf("I (5 last results)=\n");for(inti=nq-5;i<nq;i++){for(intj=0;j<k;j++)printf("%5zd ",I[i*k+j]);printf("\n");}delete[]I;delete[]D;}delete[]xb;delete[]xq;return0;}