vector<Path> au2pp(LL au_id, LL id, vector<Paper> paper_by_au, Paper paper){ vector<Paper> paper_ref_ed; /// Papers that refers to Id vector<Paper> paper_au_af; thread t21(f21, paper, ref(paper_ref_ed)); thread t22(f22, paper, ref(paper_au_af)); t21.join(); t22.join(); vector<vector<LL> > ret; au2pp_1hop(au_id, id, ret, paper); au2pp_2hop(au_id, id, ret, paper_by_au, paper_ref_ed); au2pp_3hop(au_id, id, ret, paper_by_au, paper, paper_ref_ed, paper_au_af); return ret; }
void f2(LL au_id, LL id, Paper paper, vector<Paper> &paper_au_af, vector<Paper> &paper_ref_ed){ thread t21(f21, paper, ref(paper_ref_ed)); thread t22(f22, paper, ref(paper_au_af)); t21.join(); t22.join(); }
void testTensors() { Tensor1<float> t(10); for(int i=0;i<t.length();i++) { t(i) = (float)rand(); } t.print(); Tensor2<float> t2(3, 2); for(int i=0;i<t2.dim(0);i++) { for(int j=0;j<t2.dim(1);j++) { t2(i, j) = (float)(rand() % 16); } } t2.print("T2"); t2.unfold().print(); Tensor3<float> t3(2, 3, 4); for(int i=0;i<t3.dim(0);i++) { for(int j=0;j<t3.dim(1);j++) { for(int k=0;k<t3.dim(2);k++) { t3(i, j, k) = (float)(rand() % 32 ); } } } t3.print("T3"); cout << "unfold in mode 0:" << endl; Tensor2<float> t3_unfold0 = t3.unfold(0); t3_unfold0.print("T30"); Tensor3<float> t3new = Tensor3<float>::fold(t3_unfold0, 0, 2, 3, 4); t3new.print("fold back"); cout << "unfold in mode 1:" << endl; Tensor2<float> t3_unfold1 = t3.unfold(1); t3_unfold1.print("T31"); Tensor3<float> t3new2 = Tensor3<float>::fold(t3_unfold1, 1, 2, 3, 4); t3new2.print("fold back"); cout << "unfold in mode 1:" << endl; Tensor2<float> t3_unfold2 = t3.unfold(2); t3_unfold2.print("T32"); Tensor3<float> t3new3 = Tensor3<float>::fold(t3_unfold2, 2, 2, 3, 4); t3new3.print("fold back"); cout << "mode product" << endl; Tensor3<float> tm0 = t3.modeProduct(t2, 0); tm0.print("TM0"); Tensor2<float> t22(3, 3); for(int i=0;i<t22.dim(0);i++) { for(int j=0;j<t22.dim(1);j++) { t22(i, j) = (float)(rand() % 16); } } t22.print("T22"); Tensor3<float> tm1 = t3.modeProduct(t22, 1); tm1.print("TM1"); Tensor2<float> t23(3, 4); for(int i=0;i<t23.dim(0);i++) { for(int j=0;j<t23.dim(1);j++) { t23(i, j) = (float)(rand() % 16); } } t23.print("T23"); Tensor3<float> tm2 = t3.modeProduct(t23, 2); tm2.print("TM2"); auto comp = t3.svd(); auto tcore = std::get<0>(comp); auto tu0 = std::get<1>(comp); auto tu1 = std::get<2>(comp); auto tu2 = std::get<3>(comp); tcore.print("core"); tu0.print("u0"); tu1.print("u1"); tu2.print("u2"); auto trecon = tcore.modeProduct(tu0, 0) .modeProduct(tu1, 1) .modeProduct(tu2, 2); trecon.print("recon"); t3.print("ref"); int ms[3] = {0, 1, 2}; int ds[3] = {2, 3, 4}; vector<int> modes(ms, ms+3); vector<int> dims(ds, ds+3); auto comp2 = t3.svd(modes, dims); tcore = std::get<0>(comp2); auto tus = std::get<1>(comp2); tcore.print("core"); trecon = tcore; for(int i=0;i<modes.size();i++) { auto tui = tus[i]; trecon = trecon.modeProduct(tui, modes[i]); tui.print("ui"); } trecon.print("recon"); t3.print("ref"); }